简体   繁体   English

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

[英]Python: data = s.recv(1024) socket.timeout: timed out

I am trying to create a simple chat room app where multiple clients can talk to everyone and all their messages can be seen by everyone else connected to the server.我正在尝试创建一个简单的聊天室应用程序,其中多个客户端可以与每个人交谈,并且连接到服务器的其他人都可以看到他们的所有消息。

However I keep getting a socket time out error.但是我不断收到套接字超时错误。

When trying with telnet as the client like so telnet 127.0.0.1 2066 , the application works fine, however once I add my own client.py that's when the issues arise当尝试使用 telnet 作为客户端时,例如telnet 127.0.0.1 2066 ,该应用程序运行良好,但是一旦我添加了自己的client.py ,就会出现问题

To run the server.py you can do python3 server.py要运行server.py ,您可以执行python3 server.py

My server.py looks like so:我的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()

To run the client.py you can do: python3 client.py 127.0.0.1 2066 your_name要运行client.py ,您可以执行以下操作: python3 client.py 127.0.0.1 2066 your_name

My client.py looks like so:我的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();    

My config.ini looks like so:我的config.ini看起来像这样:

[details]

HOST=127.0.0.1
PORT=2066

A better way to write the client.py would also be appreciated.编写client.py的更好方法也将不胜感激。 Most examples I've come cross only allow one client to communicate.我遇到的大多数示例只允许一个客户端进行通信。 I want all clients to communicate with each other like a group chat我希望所有客户都能像群聊一样互相交流

Thanks in advance提前致谢

导入套接字类 MyNet: @staticmethod def conn(z): s=socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM) message="xx" s.sendto(message.encode(),z) d, s = s.recvfrom(1024) print(s(1)) return d class A(MyNet): pass b=A

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM