TCP-клиент не получает данных с сервера

#python #sockets #tcp

#python #сокеты #tcp

Вопрос:

Я пытаюсь получить данные с TCP-сервера на python. Я пытаюсь открыть файл на сервере и, прочитав его содержимое, пытаюсь отправить его TCP-клиенту. Данные правильно считываются из файла, когда я пытаюсь сначала распечатать его на стороне сервера, но на стороне клиента ничего не получено. PS. Я новичок в сетевом программировании.

Server.py

 import socket
import os
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("", 5000))
server_socket.listen(5)

client_socket, address = server_socket.accept()
print ("Conencted to - ",address,"n")
data = client_socket.recv(1024).decode()
print ("Filename : ",data)
fp = open(data,'r')
string = fp.read()
fp.close()
print(string)
size = os.path.getsize(data)
size = str(size)
client_socket.send(size.encode())
client_socket.send(string.encode())
client_socket.close()
  

Client.py

 import socket,os
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("", 5000))
size = 1024

print ("Your filename : n")
string = input()
client_socket.send(string.encode())
size = client_socket.recv(1024).decode()
print ("The file size is - ",size[0:2]," bytes")
size = int(size[0:2])
string = client_socket.recv(size).decode()
print ("nFile contains : ")
print (string)
client_socket.close();
  

Комментарии:

1. Каково ваше наблюдение за запуском клиента?

2. Это то, что я получаю на стороне клиента: ваше имя файла: data.txt Размер файла составляет — 25 байт Файл содержит :

Ответ №1:

Попробуйте:

 #Get just the two bytes indicating the content length - client_socket.send(size.encode())

buffer = client_socket.recv(2)
size = len(buffer) 
print size
print ("The file size is - ",buffer[0:2]," bytes")

#Now get the remaining. The actual content

print buffer.decode()
buffer = client_socket.recv(1024)
size = len(buffer)
print size
print buffer.decode()
  

Комментарии:

1. stuck….it похоже, что сервер просто продолжает отправлять, в то время как клиент просто продолжает получать..

2. Есть ли у вас цикл while, введенный в соответствии с другим ответом. Можете ли вы попробовать использовать свой исходный код?

3. Попробовал это без цикла, он печатает размер как ‘0’ байт.

4. Я отредактировал свой пост. Я делаю два recv . Один раз только первые два байта, чтобы получить длину содержимого, а затем фактическое содержимое. Попробуйте, если это поможет.

5. Пробовал и это, данные не получены :/

Ответ №2:

Добавьте Accept() в цикл while, как показано ниже.

в то время как True:
client_socket, address = server_socket.accept()
print («Подключен к — «, адрес, «n»)
……

Комментарии:

1. Как это изменение помогает?

2. У вас разрешено максимальное соединение 5, поэтому accept должен быть в цикле. — это не работает для более чем одного соединения без цикла. Если он все еще не работает, проверьте, какую ошибку он выдает, с помощью try catch. попробуйте: client_socket, address = server_socket.accept() кроме socket.error:

3. по-прежнему нет исключения, просто застрял.