2
소켓과 스레딩 모듈을 사용하여 파이썬에서 서버 - 클라이언트 통신을 만들고 있습니다. 클라이언트를 서버에 연결하고 일부 데이터를 보내고 일부 데이터를 수신하지만 문제는 두 가지 메시지 만 보낼 수 있다는 것입니다. 그 후에는 서버가 내 패킷을 수신하지 않습니다. 누군가가 무엇이 잘못되었는지 말해 줄 수 있습니까? 미리 감사드립니다.서버 루프 Python 소켓 및 스레딩 모듈 사용
Server.py :
import socket
from threading import Thread
class Server:
def __init__(self):
self.host = '127.0.0.1'
self.port = 9999
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind((self.host, self.port))
self.server.listen(5)
self.threads = []
self.listen_for_clients()
def listen_for_clients(self):
print('Listening...')
while True:
client, addr = self.server.accept()
print('Accepted Connection from: '+str(addr[0])+':'+str(addr[1]))
self.threads.append(Thread(target=self.handle_client, args=(client, addr)))
for thread in self.threads:
thread.start()
def handle_client(self, client_socket, address):
client_socket.send('Welcome to server'.encode())
size = 1024
while True:
message = client_socket.recv(size)
if message.decode() == 'q^':
print('Received request for exit from: '+str(address[0])+':'+str(address[1]))
break
else:
print('Received: '+message.decode()+' from: '+str(address[0])+':'+str(address[1]))
client_socket.send('Received request for exit. Deleted from server threads'.encode())
client_socket.close()
if __name__=="__main__":
main = Server()
Client.py
import socket
import sys, time
def main():
target_host = '127.0.0.1'
target_port = 9999
try:
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
print('Could not create a socket')
time.sleep(1)
sys.exit()
try:
client.connect((target_host, target_port))
except socket.error:
print('Could not connect to server')
time.sleep(1)
sys.exit()
while True:
data = input()
client.send(data.encode())
message = client.recv(4096)
print('[+] Received: '+ message.decode())
main()
''않습니다 서버가 클라이언트로부터의 접속을 취득 할 때마다'self.threads'의 thread를 개시합니다. 당신이 원하는 것이 아닙니다. –
다음을 사용하십시오 :'Thread (target = self.handle_client, args = (client, addr)). start()'. – xaav
@ xaav eariel을 사용하여 for 루프가 무언가를 바꿀 수 있기를 바랍니다. –