Python - 客户端和服务器通信
Python - Client and server communication
我写了一个 python 脚本,它将与服务器通信,获取它的数据并将数据发送回服务器,某种 "echo client".
这是我写的:
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
我已经在网上寻找这个错误的解决方案,但没有成功。
有人可以帮我解决吗?
谢谢
我最近一直在研究套接字。我现在没有服务器来测试你的代码,所以我想我会快速评论我所看到的。您似乎在一开始就关闭了套接字(用于写入),因此您的 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?
我写了一个 python 脚本,它将与服务器通信,获取它的数据并将数据发送回服务器,某种 "echo client".
这是我写的:
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
我已经在网上寻找这个错误的解决方案,但没有成功。
有人可以帮我解决吗?
谢谢
我最近一直在研究套接字。我现在没有服务器来测试你的代码,所以我想我会快速评论我所看到的。您似乎在一开始就关闭了套接字(用于写入),因此您的 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?