带有Python服务器和c#客户端的套接字
我正在使用python服务器和C#client开发用于套接字通信的服务器/客户端体系结构!此应用程序用于通过套接字传输文件。我遇到的问题是,用python编写的服务器从未从(while data!=“”)循环中退出,并且在收到整个文件后,它在指令中被阻塞(data=client.recv(128)) 这是我的客户代码:带有Python服务器和c#客户端的套接字,c#,python,sockets,server,client,C#,Python,Sockets,Server,Client,我正在使用python服务器和C#client开发用于套接字通信的服务器/客户端体系结构!此应用程序用于通过套接字传输文件。我遇到的问题是,用python编写的服务器从未从(while data!=“”)循环中退出,并且在收到整个文件后,它在指令中被阻塞(data=client.recv(128)) 这是我的客户代码: try { using (StreamReader fs = new StreamReader(path,System.T
try
{
using (StreamReader fs = new StreamReader(path,System.Text.Encoding.ASCII,false,128))
{
while (str !="")
{
Byte[] sentBytes= new Byte[data];
str = fs.ReadToEnd();
sentBytes = Encoding.ASCII.GetBytes(str);
clientSocket.Send(sentBytes);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
这是服务器代码:
import socket
import timeit
port=15555
host = "127.0.0.1"
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((host,port))
socket.listen(5)
print ("waiting for connection..")
while True:
client, addr = socket.accept()
print ("Connection established to {}".format(addr))
with open('received_file.csv','wb') as f:
print ("file opened")
size=0
start=timeit.default_timer()
data = client.recv(128)
while data!="":
print ('receiving data= ',(size))
f.write(data)
size=size+128
data = client.recv(128)
stop=timeit.default_timer()
f.close()
time=stop-start
print ("sending finished! time= ", time , " seconds")
client.close()
socket.close()
救命啊 发送一个文件头,上面写着它将发送多少字节,怎么样?你要求客户机接收128字节,现在你抱怨为什么它要等待这128字节。没有意义…如上所述,您需要传递文件大小,或者发送一些终止符信号,以便知道您已收到整个文件。
client.recv
在客户端关闭其套接字之前不会返回空缓冲区。此外,如果您使用的是python3,则空的str
(“
)永远不会等于空的字节(b”“
)。在python3中,recv
生成一个字节
值。可能最好使用隐式布尔转换:而数据:
如何发送一个文件头,说明它将发送多少字节?您要求客户端接收128字节,现在您正在抱怨它为什么要等待这128字节。没有意义…如上所述,您需要传递文件大小,或者发送一些终止符信号,以便知道您已收到整个文件。client.recv
在客户端关闭其套接字之前不会返回空缓冲区。此外,如果您使用的是python3,则空的str
(“
)永远不会等于空的字节(b”“
)。在python3中,recv
生成一个字节
值。最好使用隐式布尔转换:而数据: