我正在尝试创建一个简单的聊天室应用程序,其中多个客户端可以与所有人交谈,并且连接到服务器的其他所有人都可以看到他们的所有消息。
但是,我一直收到套接字超时错误。
当像telnet 127.0.0.1 2066
这样尝试使用telnet作为客户端时,该应用程序可以正常工作,但是一旦我添加了自己的client.py
,就出现了问题
要运行server.py
,您可以执行python3 server.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()
要运行client.py
,您可以执行以下操作:python3 client.py 127.0.0.1 2066 your_name
我的client.py
如下:
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();
我的config.ini
如下:
[details]
HOST=127.0.0.1
PORT=2066
一种更好的写client.py
的方法也将受到赞赏。我遇到的大多数示例仅允许一个客户进行交流。我希望所有客户像群聊一样互相交流
预先感谢