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 が機能します。OS は通常、それより低いポート番号の使用を制限しているため、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:ループにスタックし、基本的にこの 2 行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 に答える