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)コマンドはバッファ内のすべてのデータを取得し、2 番目のコマンドはrecv(1024)空になります。

@gnibbler によって適切な解決策が提案されました。

戻り値を保存せずに呼び出すclientSocket.recv(1024)ことは、値を保存せずにスタックからポップするようなものです。

于 2013-10-14T07:37:24.857 に答える