简单的客户端程序

时间:2013-10-14 06:32:07

标签: python sockets

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

为什么这不起作用?

2 个答案:

答案 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)是一个可以获取可用数据的命令。

来自Python Docs的

  

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

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

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

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