还有一些关于这个问题的帖子,但没有一个对我有帮助。 我正在尝试在python中构建一个简单的服务器 - 客户端关系
server.py
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1",8889))
s.listen(1)
try:
while True:
client, add = s.accept()
data = client.recv(1024)
if not data:
print 'No data'
print data
finally:
s.close()
client.py
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1",8889))
try:
while True:
message = 'Foo'
s.send(message)
ans = s.recv(1024)
print ans
finally:
s.close()
我首先运行服务器,但是当我尝试运行客户端时,我得到了这个Errno 10054 --> An existing connection was forcibly closed by the remote host
在请求浏览器使用ip和相关端口时,我会收到一些数据。
我对网络很陌生,所以请解释我的代码中可能出现的明显错误。
编辑*主要问题是,客户端在某种程度上是错误的,因为它在recv上也返回一个空字符串
提前谢谢
答案 0 :(得分:1)
我在猜测:
服务器接受一个套接字然后执行
client, add = s.accept()
data = client.recv(1024)
...
client, add = s.accept()
客户端同时执行此操作:
s.send(message)
ans = s.recv(1024) # blocks until timeout
如果现在其他客户端连接到服务器,则替换client
,收集并关闭套接字垃圾。然后s.recv(1024)
将告知连接已重置。
查看import select
或扭曲(google around)以同时处理多个连接。
答案 1 :(得分:1)
Main issue is, that the client is somehow wrong, because it returns also an empty string on recv
客户端没有从服务器接收任何内容,因为服务器没有发送任何内容。
在服务器端,print data
之后,添加client.send(data)
会将字符串发送回客户端。