尝试创建我的第一个客户端 - 服务器应用程序遇到了错误...... 此代码与文档中的完全相同,但我遇到了问题。
服务器:
import socket
HOST = 'localhost'
PORT = 9090
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while True:
data = conn.recv(1024)
if not data: break
print data
conn.close()
客户端:
import socket
HOST = 'localhost'
PORT = 9090
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
s.close()
执行后,我在服务器部分看不到消息print Connected by, addr
和print data
。
我使用Windows 7,Comodo防火墙(我试图关闭防火墙,但它没有解决问题),Avast Antivirus,Python 2.7。
非常有趣,一切正常,只是在一瞬间不起作用。
此外,我的服务器应用程序只是冻结,直到客户端连接到服务器。它可以解决使用线程吗?
抱歉我的英语不好。提前谢谢。
答案 0 :(得分:1)
您需要在循环中accept()
和print
。 (或使用两个循环)。我对Python中的套接字编程不是很熟悉,但我猜它看起来像这样。 (完全未经测试!)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
while True:
conn, addr = s.accept()
print 'Connected by', addr
while True:
data = conn.recv(1024)
if not data:
break
print data
conn.close()
答案 1 :(得分:0)
+1到Cfreak。基本上数据发生的是它被分配一个空字符串,导致循环中断。因此将print语句放在循环中可以解决问题。假设您需要在循环终止后访问该数据,请尝试类似
的内容data = []
while True:
datum = conn.recv(1024)
data.append(datum)
if not datum: break
print " ".join(data)
以下是我正在运行的代码和我的计算机,它的工作原理
客户端
import socket
HOST = 'localhost'
PORT = 9090
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
s.close()
服务器
import socket
HOST = 'localhost'
PORT = 9090
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
data = []
while True:
datum = conn.recv(1024)
data.append(datum)
if not datum: break
print " ".join(data)
conn.close()
所以我不认为你的代码有问题......如果你的机器上没有防火墙/防病毒软件,那就试试那台机器上的程序。