带有Python服务器和c#客户端的套接字

带有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

我正在使用python服务器和C#client开发用于套接字通信的服务器/客户端体系结构!此应用程序用于通过套接字传输文件。我遇到的问题是,用python编写的服务器从未从(while data!=“”)循环中退出,并且在收到整个文件后,它在指令中被阻塞(data=client.recv(128))

这是我的客户代码:

        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
生成一个
字节
值。最好使用隐式布尔转换:
而数据: