所以,这里有一些代码:
obj.HOST = ""
obj.PORT = int(port.get()) # it's 100% correct PORT number
obj.srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
obj.srv.bind((obj.HOST, obj.PORT))
obj.srv.listen(1)
obj.sock, obj.addr = obj.srv.accept()
class Client(threading.Thread):
def __init__(self,from_):
if from_.ip.get() == '':
obj.HOST = 'localhost' # I am starting both programs from 1 computer, so it's 'localhost'
else:
obj.HOST = from_.ip.get()
obj.PORT = int(from_.port.get()) # it's 100% correct PORT number (the same as previous)
obj.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
obj.sock.connect((obj.HOST, obj.PORT))
threading.Thread.__init__(self)
def run(self):
command = obj.sock.recv(1024)
print command
if command == 'confirm':
print 'confirm'
elif command == 'start':
print 'start'
client = Client(cl) # cl is class, where I get port. It's works 100% correct
client.start()
我在计算机上启动了相同的程序。一个是主持人,第二个是客户。
问题1:当我等待连接时,我的服务器脚本正在冻结。怎么修? 连接后两个程序都能正常工作,但是当服务器发送一些信息(字符串)时,客户端脚本冻结。
问题2:那么如何修复它?
答案 0 :(得分:0)
不确定obj是什么。 但是您没有从服务器向客户端发送任何内容。 在服务器端,你可以做这样的事情:
conn, addr = srv.accept()
print 'Connected by', addr
conn.send("confirm")
conn.close()
这将接受单个连接,发送一些数据“确认”,关闭连接并退出。
与客户方面相同:
def run(self):
command = self.sock.recv(1024)
print command
print "Recieved : ", command
self.sock.close()
这将连接到服务器,接收一些数据,打印和关闭连接。
recv是一个阻塞调用,将阻塞,直到它从服务器收到一些数据。这可能是导致冻结的原因。