1

我有一个表单控制台应用程序,它为发送和接收执行 TCP 套接字连接。我需要帮助才能获得对 STRING 的以下回复。以下代码确实将响应写入控制台,但我也想

      byte[] b = new byte[100];
        int k = s.Receive(b);
        Console.WriteLine("Recieved...");

        for (int i = 0; i < k; i++)
            Console.Write(Convert.ToChar(b[i]));

        ASCIIEncoding asen = new ASCIIEncoding();
        s.Send(asen.GetBytes("RECEIVED :"));

我想得到类似的东西

    String GETSTRING;
    byte[] b = new byte[100];
    int k = s.Receive(b);
    Console.WriteLine("Recieved...");

    for (int i = 0; i < k; i++)
        Console.Write(Convert.ToChar(b[i]));

     GETSTRING = *WHATEVER RESPONSE RECEIVED ABOVE*

    ASCIIEncoding asen = new ASCIIEncoding();
    s.Send(asen.GetBytes("RECEIVED :"));

==================================================== =====

第 2 部分 我怎样才能让它总是“等待”来自另一个客户端的响应,并且不会向控制台发送垃圾邮件?

                IPAddress ipAd = IPAddress.Parse("127.0.0.1");
                TcpListener myList = new TcpListener(ipAd, 8001);

                myList.Start();

                Console.WriteLine("The local End point is  :" +
                                  myList.LocalEndpoint);
                Console.WriteLine("Waiting for a connection.....");
                Socket s = myList.AcceptSocket();
                Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

                byte[] b = new byte[100];
                int k = s.Receive(b);

                while(***something here***){
                Console.WriteLine("Recieved...");

               for (int i = 0; i < k; i++)
                Console.Write(Convert.ToChar(b[i]));

               ASCIIEncoding asen = new ASCIIEncoding();
              s.Send(asen.GetBytes("RECEIVED :"));
              }
4

3 回答 3

3

您的实现存在一个大问题...... TCP 套接字不一定会立即接收整个消息 - 您在调用Receive. 您可能还没有遇到过这种情况,因为您在本地进行测试并且没有真正的网络延迟。这就是 Sockets 的难点所在。

您需要循环接收,直到收到所有内容。但是,在您创建一个自定义协议层之前,您无法知道您已经收到了所有内容,该协议层为您的接收者提供了完成消息所需的字节数。

试试我的开源库 SimplSockets。它为您正确构建消息,规避上述问题。http://www.github.com/ironyx/simplsockets

要回答您的原始问题,这取决于您所需的编码。如果您想支持几乎所有可能的字符,我会使用:

string result = Encoding.UTF8.GetString(bytes[]);
于 2013-11-13T04:01:02.727 回答
0

String value = System.Text.Encoding.ASCIIEncoding.GetString(byte_buffer);

于 2013-11-13T03:56:24.840 回答
0
string s = Encoding.Default.GetString(b, 0, b.Length);
于 2013-11-13T03:57:28.450 回答