JustMe
JustMe

Reputation: 23

Socket stuck in loop

I am trying to make server and client (I am still learning) but the server is stuck in the while loop even after he received the "exit" from the client. what am I doing wrong? thank you

server

import socket
s = socket.socket()
s.bind(("0.0.0.0",5511))
s.listen(1)

c, addr = s.accept()
msg = c.recv(2048).decode()
while msg != "exit":
    print(msg)
    print("still connected")
    msg = c.recv(2048).decode()
    c.settimeout(5)
c.close()
s.close()

client

import socket
s = socket.socket()
s.connect(("127.0.0.1",5511))

msg = input("What send to the server: ")
while msg != "exit":
    s.send(msg.encode())
    msg = input("What send to the server: ")
s.close()

Upvotes: 1

Views: 891

Answers (3)

rmh
rmh

Reputation: 11

Take a look at your while loop in the client. It doesn't execute the body if msg == "exit". So if msg is "exit", the client doesn't send anything to the server. As a result, the server doesn't receive a message and blocks on the msg = c.recv(2048).decode() line in the ""server"" code.

server.py

import socket
s = socket.socket()
s.connect(("127.0.0.1",5511))

msg = ""
while msg != "exit":
  msg = input("What send to the server: ")
  s.send(msg.encode())
s.close()

client.py

import socket
s = socket.socket()
s.bind(("0.0.0.0",5511))
s.listen(1)

c, addr = s.accept()
msg = c.recv(2048).decode()
while msg != "exit":
  print(msg)
  print("still connected")
  msg = c.recv(2048).decode()
  c.settimeout(5)
c.close()
s.close()

Upvotes: 1

Jocomol
Jocomol

Reputation: 322

I initially posted this as a edit to rmh's answer but the edit didn't go throug till now so I post my own answer

server.py

import socket
s = socket.socket()
s.connect(("127.0.0.1",5511))

msg = ""
while msg != "exit":
  msg = input("What send to the server: ")
  s.send(msg.encode())
s.close()

client.py

import socket
s = socket.socket()
s.bind(("0.0.0.0",5511))
s.listen(1)

c, addr = s.accept()
msg = c.recv(2048).decode()
while msg != "exit":
  print(msg)
  print("still connected")
  msg = c.recv(2048).decode()
  c.settimeout(5)
c.close()
s.close()

Upvotes: 1

JustMe
JustMe

Reputation: 23

Thank you for all your help, I added new line of "s.send(msg.encode())" after the "while" and it work now.

Thank you very much!

Upvotes: 1

Related Questions