当前位置:  开发笔记 > 编程语言 > 正文

套接字只接收消息C#的一部分

如何解决《套接字只接收消息C#的一部分》经验,为你挑选了1个好方法。

我有一些接收一系列消息的代码:

byte[] buffer = new byte[10240];
//...
sock.Receive(buffer);
string response = message(buffer);
Console.WriteLine("Message Recieved");
if (!verifyUser(response, sock))
Console.WriteLine("User Invalid");
//...
static private bool verifyUser(string userString, Socket sock)
{
   string[] userData = userString.Split(' ');
   int i = 0;
   while (true)
    {
        if (userData[0].ToUpper() != "USER")
        {
           byte[] buffer = message("WHO");
           sock.Send(buffer);
           userData = userString.Split(' ');
           i++;
           if (i > 4)
           {
                        return false;
                    }
                    continue;
                }
                else
                    break;
            }
Console.WriteLine("Connection recieved from " + userData[1] + " with hash of "/* + userData[2]*/);
}

我遇到的问题是,如果我提交用户名unkwntech所有显示它unkwnt,第二个值似乎永远不会到达那里.发送数据的应用程序如下所示:

static void Main(string[] args)
        {
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
            EndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 200);
            sock.Connect(remoteEP);
            byte[] buffer = Encoding.ASCII.GetBytes("USER unkwntech a3f5h4a35sfg");//Made up hash
            sock.Send(buffer);
            sock.Receive(buffer);
            Console.WriteLine(Encoding.ASCII.GetString(buffer));
            Console.ReadLine();
        }

Jon Skeet.. 7

假设在发送时,所有数据都以一个数据包结束,并且您将在另一端收到所有数据.这不是TCP/IP的工作原理.这是一个流媒体协议 - 您永远不应该假设您一次会收到多少数据.

基本上你需要从流中读取,直到你读完所有数据并且套接字已经关闭,或者直到你得到"足够"的数据.如果您控制协议并且它是一个会话协议,那么如果您发送的每条消息都以其长度为前缀,它会使生活变得更加容易 - 这意味着另一端知道预期会有多少数据.



1> Jon Skeet..:

假设在发送时,所有数据都以一个数据包结束,并且您将在另一端收到所有数据.这不是TCP/IP的工作原理.这是一个流媒体协议 - 您永远不应该假设您一次会收到多少数据.

基本上你需要从流中读取,直到你读完所有数据并且套接字已经关闭,或者直到你得到"足够"的数据.如果您控制协议并且它是一个会话协议,那么如果您发送的每条消息都以其长度为前缀,它会使生活变得更加容易 - 这意味着另一端知道预期会有多少数据.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有