在下面的代码中第一次执行方法时发生连接,但是从第二次执行线程中的函数开始,accept()函数不接受任何functoin,它只是停留在提示符下即使我从其他本地设备连接也没有。任何帮助都会非常有帮助。这是代码。我对线程很新。因此,请纠正我的错误,并对我的代码中的任何错误进行全面解释。
def serverwaiter():
myip = "192.168.1.2";
port = 6027;
s = socket.socket();
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
s.bind((myip, 6027));
s.listen(10);
print("My ip :- {}".format(myip)) ;
cobj , addr = s.accept() ;
mythread = threading.Thread(target = serverwaiter, name = "TCP connection waiter {}".format(threading.active_count()-1))
threads.append((cobj,addr)) ;
mythread.start() ;
print("Connected to {}".format(addr[0])) ;
data = cobj.recv(1024) ;
print("Host {} sent data = {}".format(addr, data));
while(len(data)!=0):
print("Waiting for Data from {}".format(addr[0])) ;
data = cobj.recv(1024) ;
data = data.decode() ;
print("Host {} sent data = {}".format(addr ,data)) ;
serverwaiter() ;
答案 0 :(得分:0)
你应该在while-true循环中运行线程的目标。我还建议您整理代码以便更好地理解。
def mythread():
while True:
accept()
请记住始终将变量作为参数传递,以便不遗漏任何内容
答案 1 :(得分:0)
关闭线程只是为了服务客户端。现在,每次客户端连接时,您都要启动另一台服务器。试试这个:
import socket
import threading
def serverwaiter():
port = 6027
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(('',6027))
s.listen(10)
while True:
cobj,addr = s.accept()
mythread = threading.Thread(target=client,name='TCP client {}'.format(threading.active_count()-1),args=(cobj,addr))
mythread.daemon = True # So client threads die on main thread exit.
mythread.start()
def client(cobj,addr):
print('Connected to',addr)
while True:
data = cobj.recv(1024)
if not data: break
print('Host {} sent data = {}'.format(addr,data.decode()))
cobj.close()
serverwaiter()