簡體   English   中英

Python:數據= s.recv(1024)socket.timeout:超時

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

我正在嘗試創建一個簡單的聊天室應用程序,其中多個客戶端可以與每個人交談,並且連接到服務器的其他人都可以看到他們的所有消息。

但是我不斷收到套接字超時錯誤。

當嘗試使用 telnet 作為客戶端時,例如telnet 127.0.0.1 2066 ,該應用程序運行良好,但是一旦我添加了自己的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的更好方法也將不勝感激。 我遇到的大多數示例只允許一個客戶端進行通信。 我希望所有客戶都能像群聊一樣互相交流

提前致謝

導入套接字類 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