Skip to content
Snippets Groups Projects
Commit 92647424 authored by Faris Hasim Syauqi's avatar Faris Hasim Syauqi
Browse files

add segment

parent 0f1ae940
Branches
No related merge requests found
......@@ -33,13 +33,16 @@ class Client():
def broadcast(self):
self.send(bytes(), (HOST_ADDRESS, BROADCAST_PORT))
log("!", "Message sent to broadcast address")
data, address = self.recv()
log("!", data)
log("!", f"Server address : {address}")
def handshake(self):
# To-Do
data, address = self.recv()
log("!", f"Server address : {address}")
seg = Segment()
seg.from_bytes(data)
log("!", seg.bytes[:100])
return
def recv_file(self):
......
import socket
from segment import *
################
### CONSTANT ###
......@@ -6,15 +7,10 @@ import socket
BROADCAST_PORT = 9999
HOST_NAME = socket.gethostname()
HOST_ADDRESS = socket.gethostbyname(HOST_NAME)
SEG_SIZE = 32768
SEG_SIZE = 32782
################
### FUNCTION ###
################
def log(context:str, info:str, end:str=None):
print(f"[{context}] {info}", end=end)
def cheksum(data:bytes):
# To Change
return data[0]
\ No newline at end of file
# constant
SEG_SIZE = 32782
DATA_SIZE = SEG_SIZE - 12
class Segment():
def __init__(self):
self.bytes = [0 for _ in range(SEG_SIZE)]
def set_seq_no(self, val):
self.bytes[0] = val >> 24 & 0xff
self.bytes[1] = val >> 16 & 0xff
self.bytes[2] = val >> 8 & 0xff
self.bytes[3] = val & 0xff
def get_seq_no(self):
return self.bytes[0] << 24 + \
self.bytes[1] << 16 + \
self.bytes[2] << 8 + \
self.bytes[3]
def set_seq_no(self, val):
self.bytes[4] = val >> 24 & 0xff
self.bytes[5] = val >> 16 & 0xff
self.bytes[6] = val >> 8 & 0xff
self.bytes[7] = val & 0xff
def get_seq_no(self):
return self.bytes[4] << 24 + \
self.bytes[5] << 16 + \
self.bytes[6] << 8 + \
self.bytes[7]
def setSYN(self):
# raise SYN flag
self.bytes[8] = self.bytes[8] | 0b01000000
def getSYN(self):
return self.bytes[8] & 0b01000000
def setACK(self):
# raise ACK flag
self.bytes[8] = self.bytes[8] | 0b00001000
def getACK(self):
return self.bytes[8] & 0b00001000
def setFIN(self):
# raise FIN flag
self.bytes[8] = self.bytes[8] | 0b10000000
def getFIN(self):
return self.bytes[8] & 0b10000000
def get_checksum(self):
return self.bytes[10] << 8 + self.bytes[11]
def set_checksum(self, val):
self.bytes[10] = val >> 8 & 0xff
self.bytes[11] = val & 0xff
def count_checksum(self):
# To-Do
# ...
return
def to_bytes(self):
return bytes(self.bytes)
def from_bytes(self, byte:bytes):
self.bytes = list(byte)
if __name__=="__main__":
seg = Segment()
seg.setFIN()
print(seg.bytes[:100])
......@@ -2,10 +2,6 @@ import socket
import sys
from common import *
# def CONSTANT
SERVER_PORT = 10000 # default
MSG = "Welcome to the server"
class Server():
def __init__(self, port=10000, filepath="input"):
......@@ -23,6 +19,7 @@ class Server():
def init_socket(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind((HOST_NAME, self.SERVER_PORT))
def send(self, data, client_addr):
self.socket.sendto(data, client_addr)
......@@ -30,14 +27,20 @@ class Server():
def recv(self):
return self.socket.recvfrom(SEG_SIZE)
def recv_broadcast(self):
return self.broadcast_socket.recvfrom(SEG_SIZE)
def listen(self):
self.socket.bind((HOST_NAME, BROADCAST_PORT))
# init broadcast socket for listening broadcast message
self.broadcast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.broadcast_socket.bind((HOST_NAME, BROADCAST_PORT))
log("!", f"Server listening on broadcast address\n")
while True:
message, address = self.recv()
message, address = self.recv_broadcast()
log("!", f"Client {address} found")
self.send(bytes(), address) # <-- To-change
# self.send(bytes(), address) # <-- To-change
self.clients.append(address)
log("?", "Listen more? (y/n) ", end="")
......@@ -47,6 +50,10 @@ class Server():
def handshake(self, client_addr):
# To-DO
segment = Segment()
segment.setSYN()
self.send(segment.to_bytes(), client_addr)
return
def send_file(self, client_addr):
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment