2
私はソケットとスレッドモジュールを使用してPythonでサーバーとクライアントの通信を行っています。私はサーバーにクライアントを接続し、いくつかのデータを送信し、いくつかのデータを受信するが、問題は、私は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内のスレッドのために:'んサーバがクライアントからの接続を取得するたびに 'self.threads'でスレッドを開始します。あなたが望むものではありません。 –
これは 'Thread(target = self.handle_client、args =(client、addr))。start()'を使ってください。 – xaav
@ xaav私はearielを使って、forループが何かを変えることができると期待しました。 –