下面粘贴的是我的客户端和服务器python脚本。TCP连接建立良好。服务器侦听良好。目前,我已经制作了我的计算机客户端和服务器。基本上,我没有收到文件。客户端只是说收到文件,然后就没有别的了。服务器正在侦听。什么都不承认。看看我打开文件的方式,并指导我完成这项工作。
SERVER.py
import socket
import sys
import os.path
import operator
serverPort = 5005
#create socket object for server
serverSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serverSocket.bind(('192.168.1.8',serverPort))
serverSocket.listen(1)
print ('Server listening...')
print (socket.gethostbyname(socket.gethostname()))
while True:
#return value of accept() is assigned to socket object
#and address bound to that socket
connectionSocket, addr = serverSocket.accept()
#connection established with client
print ('Got connection from', addr)
print ('Awaiting command from client...')
client_request = connectionSocket.recv(1024)
file_name = client_request.recv(1024)
f = open(file_name, "rb")
print('Sending file...')
l = f.read(1024)
while(l):
connectionSocket.send(l)
l = f.read(1024)
f.close()
print('Done sending')
connectionSocket.close()
而客户端脚本如下:
import socket
import sys
serverName = '192.168.1.8'
serverPort = 49675
#in this loop, sockets open and close for each request the client makes
#while True:
#create socket object for client
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
print('Connected to server.')
fileName = "C:\Users\dell\Desktop\mano.txt"
clientSocket.send(fileName)
#if sentence == 'GET':
f = open(fileName, "wb")
print('Receiving file..')
l = clientSocket.recv(1024)
while (l):
f.write(l)
l = clientSocket.recv(1024)
f.close()
print('Done receiving file')
clientSocket.close()
偶然发现这一点,OP可能已经自己解决了这个问题,但只是以防万一。在我看来,OP在这里犯了几个错误。
- 正如Stevo所提到的,Sever和Client中使用的端口号应该是相同的端口号,在这种情况下,5005或49675都可以。任何其他高于1024的端口号实际上都是可以的,因为操作系统通常限制端口号的使用低于1024。https://hub.packtpub.com/understanding-network-port-numbers-tcp-udp-and-icmp-on-an-operating-system/你可以在这个链接中阅读有关端口号的内容
- 您的服务器文件本身存在编码错误。首先必须缩进
print ('Awaiting command from client...')
之后的所有行,并将它们的缩进与之对齐。代码只是停留在while True:
循环中,除了打印这两行print ('Got connection from', addr)
和print ('Awaiting command from client...')
之外,基本上没有做任何有意义的事情。此外,您的client_request是一个字节对象,字节对象不包含recv方法的方法
在更改服务器端的那些小错误后,我就可以运行它并从客户端接收消息。这就是它的样子。也许这个页面有帮助:https://docs.python.org/3/library/socket.html