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
Tags
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