Skip to main content
 首页 » 编程设计

python之客户端未在 Python 中接收数据

2025年05月04日9cyq1162

我是 Python 的新手,有一个基本问题,网络套接字连接的客户端可以接收数据吗?在我的问题中,客户端是发起连接的人,这可能是显而易见的,但我想说清楚。我问是因为我有另一个服务器和客户端(都是 python),它们允许服务器从客户端接收文件。它工作得很好,但我无法得到客户端接收文件的示例。 Python 一直告诉我管道已损坏,我怀疑是因为在客户端我使用了行 data = mysocket.recv(1024)。我怀疑客户端没有看到任何数据流,因此关闭了与服务器的连接。服务器将其视为损坏的管道。服务器和客户端如下。

服务器:

 #libraries to import 
 import socket 
 import os 
 import sys 
 import M2Crypto as m2c 
 
 #information about the server the size of the message being transferred 
 server_address = '10.1.1.2' 
 key_port = 8888 
 max_transfer_block = 1024 
 
 FILE = open("sPub.pem","r") 
 
 #socket for public key transfer 
 keysocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) 
 keysocket.bind((server_address, key_port)) 
 keysocket.listen(1) 
 
 while 1: 
         conn, client_addr = keysocket.accept() 
         print 'connected by', client_addr 
         #sends data to the client 
         data = FILE.read() 
         keysocket.sendall(data) 
 keysocket.close() 

客户:

 # the specified libraries 
 import socket 
 import M2Crypto as m2c 
 #file to be transferred 
 FILE = open("test.txt", "r") 
 #address of the server 
 server_addr = '10.1.1.2' 
 #port the server is listening on 
 dest_port = 8888 
 
 data = FILE.read() 
 
 
 #Creates a socket for the transfer 
 mysocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) 
 mysocket.connect( (server_addr, dest_port) ) 
 
 data = mysocket.recv(1024) 
 print data 
 #creates a new file to store the msg 
 name = "serverPubKey.pem" 
 
 #opens the new file and writes the msg to it 
 FILE = open (name, "w") 
 FILE.write(data) 
 
 
 #closes the socket. 
 mysocket.close() 

对于此事,我将不胜感激。谢谢!

请您参考如下方法:

在这样的应用程序中,有时绕过底层细节并使用 socket.makefile 会很有帮助而是使用其更高级别的 API。

在客户端关闭中,替换:

data = mysocket.recv(1024) 

与:

f = mysocket.makefile('rb') 
data = f.read(1024)           # or any other file method call you need 

source code for ftplib展示了如何在生产代码中执行此操作。