0

下面粘贴的是我的客户端和服务器 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()
4

1 回答 1

1

偶然发现这一点,OP可能已经自己解决了这个问题,但以防万一。在这里,我看到,OP 在这里犯了几个错误。

  1. 正如 Stevo 所提到的,服务器和客户端中使用的端口号应该是相同的端口号,在这种情况下,5005 或 49675 都可以。实际上,任何其他高于 1024 的端口号都可以,因为操作系统通常会限制使用低于该端口号的端口号。https://hub.packtpub.com/understanding-network-port-numbers-tcp-udp-and-icmp-on-an-operating-system/ 您可以在此链接中阅读有关端口号和内容的信息。
  2. 您的服务器文件本身有编码错误。您首先必须缩进所有行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

于 2019-09-26T09:28:39.493 回答