server.py
很好,我使用数组发送数据:
for i in range(0,len(outputdata)):
connectionSocket.send(outputdata[i])
connectionSocket.close()
但是我的客户不工作(什么都不打印):
#import socket module
from socket import *
serverName = '127.0.0.1'
serverPort = 9999
clientSocket = socket(AF_INET,SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
request = raw_input('Input the filename:')
clientSocket.send(request)
while (clientSocket.recv(1024)):
print clientSocket.recv(1024)
clientSocket.close()
为什么这不起作用?
答案 0 :(得分:0)
第一个clientSocket.recv(1024)
正在抛弃那些字节
while (clientSocket.recv(1024)):
print clientSocket.recv(1024)
您需要将它们保存到像这样的变量
中while True:
data = clientSocket.recv(1024)
if not data:
break
print data
答案 1 :(得分:0)
命令clientSocket.recv(1024)
是一个可以获取可用数据的命令。
:
从套接字接收数据。返回值是一个字符串 代表收到的数据。最大数据量 一次收到的是由bufsize指定的。请参见Unix手册页 recv(2)表示可选参数标志的含义;它默认为 零。
为了更好地理解它,您的服务器正在发送一些数据,客户端接收该数据并将其保存在缓冲区中,命令将转到该缓冲区并弹出数据(最大值为1024)在你的代码中)所以如果你在缓冲区中等待1024个字节,第一个recv(1024)
命令将获得缓冲区中的所有数据,第二个recv(1024)
将为空。
@gnibbler提出了一个很好的解决方案。
请记住调用clientSocket.recv(1024)
而不保存它的返回值就像从堆栈中弹出而不保存值。