Python - 客户端和服务器通信

时间:2018-05-25 00:13:56

标签: python client-server echo

我编写了一个python脚本,它将与服务器通信,获取其数据并将数据发送回服务器,某种类型的“回显客户端”。

这就是我写的:

import socket
import time

def netcat(hostname, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.shutdown(socket.SHUT_WR)
    while 1:
        data = s.recv(1024)
        if data == "":
            break
        print "Received:", repr(data)
        data = data.replace("\n", "")
        time.sleep(1)
        s.sendall(data)
        print "Sent:", data
    print "Connection closed."
    s.close()

netcat("127.0.0.1", 4444)

我得到了这个输出:

Received: 'Welcome!\n'

之后,我收到了这个错误:

Traceback (most recent call last):
  File "client.py", line 22, in <module>
    netcat("127.0.0.1", 4444)
  File "client.py", line 17, in netcat
    s.sendall(data)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 32] Broken pipe

我已经在网上找到了这个错误的解决方案,但没有运气。

有人可以帮我解决一下吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我最近一直在研究套接字。我现在没有服务器来测试你的代码所以我想我会很快评论我所看到的。您似乎在开始时关闭套接字(用于写入),因此您的receive语句有效,但您的sendall语句失败。

def netcat(hostname, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.shutdown(socket.SHUT_WR) <-- WHY IS THIS HERE?