【问题标题】:TCP Client retrieving no data from the serverTCP 客户端未从服务器检索数据
【发布时间】:2016-10-12 11:24:58
【问题描述】:

我正在尝试从 python 中的 TCP 服务器接收数据。我尝试在服务器上打开一个文件,并在读取其内容后,尝试将其发送到 TCP 客户端。当我尝试首先在服务器端打印数据时,从文件中正确读取了数据,但在客户端没有收到任何内容。 PS。我是网络编程的初学者。

服务器.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()

客户端.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();

【问题讨论】:

  • 您对运行客户端有何观察?
  • 这是我在客户端得到的:您的文件名:data.txt 文件大小为 - 25 字节文件包含:

标签: python sockets tcp


【解决方案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()

【讨论】:

  • 卡住了......似乎服务器只是继续发送,而客户端只是继续接收......
  • 您是否按照其他答案放入了 while 循环。您可以尝试使用您的原始代码吗?
  • 在没有循环的情况下尝试过,它将大小打印为“0”字节。
  • 我已经编辑了我的帖子。我正在做两个recv。一次只是前两个字节获取内容长度,然后是实际内容。试试看是否有帮助。
  • 也试过了,没有收到数据:/
【解决方案2】:

如下在while循环中添加Accept()。

当真:
client_socket,地址 = server_socket.accept()
print ("连接到 - ",address,"\n")
......

【讨论】:

  • 此更改有何帮助?
  • 您允许的最大连接数为 5,因此接受应该处于循环中。--它不适用于没有循环的多个连接。如果它仍然失败,请检查它使用 try catch 给出的错误。尝试:client_socket, address = server_socket.accept() 除了 socket.error:
  • 还是没有异常,只是卡住了。
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 2021-09-05
  • 1970-01-01
  • 2013-08-20
相关资源
最近更新 更多