仅当client.py运行时,Python Socket errno 10054

时间:2014-02-13 12:04:24

标签: python sockets client

还有一些关于这个问题的帖子,但没有一个对我有帮助。 我正在尝试在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上也返回一个空字符串

提前谢谢

2 个答案:

答案 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)会将字符串发送回客户端。