0

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()

为什么这不起作用?

4

2 回答 2

0

该命令clientSocket.recv(1024)是将获取可用数据的命令。

来自 Python 文档:

从套接字接收数据。返回值是一个字符串,表示接收到的数据。一次接收的最大数据量由 bufsize 指定。有关可选参数标志的含义,请参见 Unix 手册页 recv(2);它默认为零。

为了更好地理解它,您的服务器正在发送一些数据,客户端接收该数据并将其保存在缓冲区中,该命令将转到该缓冲区并弹出数据(您的代码中最大为 1024)所以如果您有 1024 个字节在缓冲区中等待,第一个recv(1024)命令将获取缓冲区中的所有数据,第二个命令recv(1024)将为空。

@gnibbler 提出了一个很好的解决方案。

记住调用clientSocket.recv(1024)而不保存它的返回值就像从堆栈中弹出而不保存值一样。

于 2013-10-14T07:37:24.857 回答
0

首先clientSocket.recv(1024)是丢弃那些字节

while (clientSocket.recv(1024)):
    print clientSocket.recv(1024)

您需要将它们保存到这样的变量中

while True:
    data = clientSocket.recv(1024)
    if not data:
        break
    print data
于 2013-10-14T06:46:03.110 回答