Python:data=s.recv(1024)socket.timeout:超时

Python:data=s.recv(1024)socket.timeout:超时,python,python-3.x,sockets,chat,Python,Python 3.x,Sockets,Chat,我正在尝试创建一个简单的聊天室应用程序,其中多个客户端可以与每个人交谈,并且所有连接到服务器的其他人都可以看到他们的所有消息 然而,我不断得到一个套接字超时错误 当尝试使用telnet作为客户机时,如sotelnet 127.0.0.1 2066,应用程序工作正常,但是一旦我添加了自己的client.py,问题就出现了 要运行server.py,您可以执行python3server.py 我的server.py看起来是这样的: import socket import configparser

我正在尝试创建一个简单的聊天室应用程序,其中多个客户端可以与每个人交谈,并且所有连接到服务器的其他人都可以看到他们的所有消息

然而,我不断得到一个套接字超时错误

当尝试使用telnet作为客户机时,如so
telnet 127.0.0.1 2066
,应用程序工作正常,但是一旦我添加了自己的
client.py
,问题就出现了

要运行
server.py
,您可以执行
python3server.py

我的
server.py
看起来是这样的:

import socket
import configparser
from _thread import * 
import sys

num_threads=0

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

config = configparser.ConfigParser()
config.read('config.ini')

HOST = config['details']['HOST']
PORT= int(config['details']['PORT'])

server_socket.bind((HOST, PORT))

print("Server started at "+ HOST +":" + str(PORT))

clients=[]

server_socket.listen(10)



def client_thread(client_socket):
    global num_threads
    num_threads+=1
    print("Encrat Chat Room\n".encode())

    while True:
        try:    
            data = client_socket.recv(1024)
            #reply = data.decode()
            if not data:
                break

            for client in clients:
                if client  != client_socket:
                     client.send(data)          
         except:
            continue
    client_socket.close()



while True:
    client_socket , address = server_socket.accept()
    clients.append(client_socket)
    print("User (%s, %s) connected\n" % address)
    start_new_thread(client_thread, (client_socket, ))


    while num_threads > 0:
        pass





server_socket.close()
import socket
import sys, select



if (len(sys.argv) < 4):
    print("Usage: python client.py <hostname> <port> <name> ")
    sys.exit()



 HOST=sys.argv[1]
 PORT=int(sys.argv[2])
 NAME=sys.argv[3]


 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.settimeout(3)


 s.connect((HOST, PORT))


 print("Connection established with server\n")
 sys.stdout.write("\n[Me :]")


 while True:

     data = s.recv(1024) #timeout error here

     if data:   
         print(data.decode())

     else:

        message =sys.stdin.readline()
        message ='[' + NAME + ':] ' + message

         s.send(message.encode())

         sys.stdout.write("\n[Me :] " )
         sys.stdout.flush();    
[details]

HOST=127.0.0.1
PORT=2066
要运行
client.py
您可以执行以下操作:
python3 client.py 127.0.0.1 2066您的\u name

我的
client.py
看起来是这样的:

import socket
import configparser
from _thread import * 
import sys

num_threads=0

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

config = configparser.ConfigParser()
config.read('config.ini')

HOST = config['details']['HOST']
PORT= int(config['details']['PORT'])

server_socket.bind((HOST, PORT))

print("Server started at "+ HOST +":" + str(PORT))

clients=[]

server_socket.listen(10)



def client_thread(client_socket):
    global num_threads
    num_threads+=1
    print("Encrat Chat Room\n".encode())

    while True:
        try:    
            data = client_socket.recv(1024)
            #reply = data.decode()
            if not data:
                break

            for client in clients:
                if client  != client_socket:
                     client.send(data)          
         except:
            continue
    client_socket.close()



while True:
    client_socket , address = server_socket.accept()
    clients.append(client_socket)
    print("User (%s, %s) connected\n" % address)
    start_new_thread(client_thread, (client_socket, ))


    while num_threads > 0:
        pass





server_socket.close()
import socket
import sys, select



if (len(sys.argv) < 4):
    print("Usage: python client.py <hostname> <port> <name> ")
    sys.exit()



 HOST=sys.argv[1]
 PORT=int(sys.argv[2])
 NAME=sys.argv[3]


 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.settimeout(3)


 s.connect((HOST, PORT))


 print("Connection established with server\n")
 sys.stdout.write("\n[Me :]")


 while True:

     data = s.recv(1024) #timeout error here

     if data:   
         print(data.decode())

     else:

        message =sys.stdin.readline()
        message ='[' + NAME + ':] ' + message

         s.send(message.encode())

         sys.stdout.write("\n[Me :] " )
         sys.stdout.flush();    
[details]

HOST=127.0.0.1
PORT=2066
如果能以更好的方式编写
client.py
,我们将不胜感激。我遇到的大多数示例只允许一个客户机进行通信。我希望所有客户都能像群聊一样相互交流


首先感谢客户机对话,服务器不知道哪个用户需要此响应……我想这就是我的循环在server.py中所做的。每个用户都可以获得responseBroadcasting方法,但没有任何客户端。如果您需要一些客户端答案,请重定向到另一个套接字。但是如果我要打印(len(clients))并且连接了两个客户端,它确实会说客户端数组的大小为2…是
已连接,不包括任何消息。你准备好学习了,但我们没有谈论任何信息。