I was following a socket tutorial and suddenly there was a bug in my code that I couldn’t understand or find
Can anyone help me find the bug? I referenced with the tutorial code and it doesn’t work. The only way is to copy/paste and I don’t like it
this is my server.py file
JavaScript
x
43
43
1
import socket
2
import threading
3
HEADER = 64
4
FORMAT = 'utf-8'
5
PORT = 5050
6
DISCONNECTED_ADDR = "!disCONNECTED"
7
SERVER = socket.gethostbyname(socket.gethostname())
8
print(SERVER)
9
ADDR = (SERVER, PORT)
10
11
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
12
server.bind(ADDR)
13
14
def handle_client(conn, addr):
15
print(f"[NEW CONNECTION] {addr} connected.")
16
17
connected = True
18
while connected:
19
msg_length = conn.recv(HEADER).decode(FORMAT)
20
if msg_length:
21
msg_length = int(msg_length)
22
msg = conn.recv(msg_length).decode(FORMAT)
23
if msg == DISCONNECTED_ADDR:
24
connected = False
25
26
print(f"[{addr}] {msg}")
27
conn.send("Msg received".encode(FORMAT))
28
29
conn.close()
30
31
def main():
32
print(f"[LISTENING] Server listening on {SERVER}")
33
server.listen()
34
while True:
35
conn, addr = server.accept()
36
thread = threading.Thread(target=handle_client, args=(conn, addr))
37
thread.start()
38
print("STARTED")
39
40
41
print("APP STARTED")
42
main()
43
And this is my client.py file
JavaScript
1
30
30
1
import socket
2
3
HEADER = 64
4
FORMAT = 'utf-8'
5
PORT = 5050
6
DISCONNECTED_ADDR = "!disCONNECTED"
7
8
SERVER = "#myipaddress"
9
ADDR = (SERVER, PORT)
10
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
11
client.connect(ADDR)
12
13
def send(msg):
14
message = msg.encode(FORMAT)
15
msg_length = len(message)
16
send_length = str(msg_length).encode(FORMAT)
17
send_length += b' ' * (HEADER - len(send_length)-1)
18
client.send(send_length)
19
client.send(message)
20
print(client.recv(2048).decode(FORMAT))
21
22
23
send("Hello World!")
24
input()
25
send("Hello Everyone!")
26
input()
27
send("Hello Tim!")
28
29
send(DISCONNECTED_ADDR)
30
Advertisement
Answer
Can anyone help me find the bug?
JavaScript121send_length += b' ' * (HEADER - len(send_length)-1)
2
You miscalculate the padding length of the header in the client. I don’t know why you thought the decrement of 1 were needed – it’s out of place, correct:
JavaScript
1
2
1
send_length += b' ' * (HEADER - len(send_length))
2