Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在通过套接字发送文件时给出符号并退出不定式循环_C#_Sockets - Fatal编程技术网

C# 如何在通过套接字发送文件时给出符号并退出不定式循环

C# 如何在通过套接字发送文件时给出符号并退出不定式循环,c#,sockets,C#,Sockets,我试图从cleint发送一个文本文件并在服务器端写入它,但我不确定如何退出不定式while(true)循环。这是我的代码,非常简单 客户 byte[] msg = File.ReadAllBytes(@"C:\TCPIP\test_big.txt"); int bytesSent = sender.Send(msg); 服务器 while (true) { Console.WriteLine("Waiting for a connection..."); // Program

我试图从cleint发送一个文本文件并在服务器端写入它,但我不确定如何退出不定式while(true)循环。这是我的代码,非常简单

客户

byte[] msg = File.ReadAllBytes(@"C:\TCPIP\test_big.txt");
int bytesSent = sender.Send(msg);
服务器

while (true) 
{
    Console.WriteLine("Waiting for a connection...");
    // Program is suspended while waiting for an incoming connection.
    Socket handler = listener.Accept();
    data = null;
    string outputPath = @"C:\output\2.txt";

    while (true) 
    {
        bytes = new byte[1024];
        int bytesRec = handler.Receive(bytes);
        data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
       //I need a "break;" here...
    }
    File.WriteAllText(outputPath, data);
    Console.WriteLine(File.Exists(outputPath) ? "File received." : "File not received.");

    handler.Shutdown(SocketShutdown.Both);
    handler.Close();

}
我用了…的例子

所以,我的问题是,当我收到所有字节时,如何退出while循环?
谢谢。

如果传入数据为空,请停止读取

while (true) 
{
    bytes = new byte[1024];
    int bytesRec = handler.Receive(bytes);

    if(bytesRec <= 0)
        break;

    data += Encoding.ASCII.GetString(bytes, 0, bytesRec); 
}
while(true)
{
字节=新字节[1024];
int bytesRec=handler.Receive(字节);

if(bytesRec如果传入数据为空,则停止读取

while (true) 
{
    bytes = new byte[1024];
    int bytesRec = handler.Receive(bytes);

    if(bytesRec <= 0)
        break;

    data += Encoding.ASCII.GetString(bytes, 0, bytesRec); 
}
while(true)
{
字节=新字节[1024];
int bytesRec=handler.Receive(字节);

在MSDN示例中,if(bytesRec)会一直等待,直到它接收到您删除的标记-因此您需要一种类似的方式来表示消息的结尾是的,这是真的。但我不确定如何用文件实现这一点。我可以用“数据”实现这一点但是,如果我正在发送一个大文件或一个不是txt的文件,该怎么办…@auburg您可以发送一个文件,然后再发送另一个文件。问题是,我的while循环只能使用byte[]msg.如果这样做了,我可以处理其他任何事情,比如,但是如何达到这一点?这是在发送块和处理不定式循环时的问题。@auburg但您正在将字节转换为字符串,不是吗,即
data+=Encoding.ASCII.GetString(bytes,0,bytesRec);If(data.IndexOf(“”>-1){break;}
?在MSDN示例中,它会一直等待,直到收到您删除的标记-因此您需要一种类似的方式来表示消息的结尾是的,这是真的。但我不确定如何用文件实现这一点。我可以用“数据”实现这一点但是,如果我正在发送一个大文件或一个不是txt的文件,该怎么办…@auburg您可以发送一个文件,然后再发送另一个文件。问题是,我的while循环只能使用byte[]msg.如果这样做了,我可以处理其他任何事情,比如,但是如何达到这一点?这是在发送块和处理不定式循环时的问题。@auburg但您正在将字节转换为字符串,不是吗,即
data+=Encoding.ASCII.GetString(bytes,0,bytesRec);If(data.IndexOf(“”>-1){break;}