Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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

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,我有一个表单控制台应用程序,它执行发送和接收的TCP套接字连接。 我需要帮助获取以下对字符串的响应。 下面的代码将响应写入控制台,但我也希望 byte[] b = new byte[100]; int k = s.Receive(b); Console.WriteLine("Recieved..."); for (int i = 0; i < k; i++) Console.Write(Convert.T

我有一个表单控制台应用程序,它执行发送和接收的TCP套接字连接。 我需要帮助获取以下对字符串的响应。 下面的代码将响应写入控制台,但我也希望

      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 :"));
byte[]b=新字节[100];
int k=s.Receive(b);
Console.WriteLine(“接收…”);
for(int i=0;i
我想买点像这样的东西

    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 :"));
String-GETSTRING;
字节[]b=新字节[100];
int k=s.Receive(b);
Console.WriteLine(“接收…”);
for(int i=0;i
=======================================================

第二部分 我怎么能让它总是“等待”另一个客户的响应呢 不会将我的writeline发送到控制台吗

                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 :"));
              }
IPAddress ipAd=IPAddress.Parse(“127.0.0.1”); TcpListener myList=新的TcpListener(ipAd,8001); myList.Start(); Console.WriteLine(“本地端点是:”+ myList.LocalEndpoint); WriteLine(“等待连接…”); 套接字s=myList.AcceptSocket(); Console.WriteLine(“从“+s.RemoteEndPoint”接受连接); 字节[]b=新字节[100]; int k=s.Receive(b); 而(***此处某物***){ Console.WriteLine(“接收…”); for(int i=0;i
String value=System.Text.Encoding.ascienceoding.GetString(字节\u缓冲区)

您的实现存在一个巨大的问题。。。TCP套接字不一定一次接收整个消息-在调用
receive
时,您可能只接收部分消息。您可能还没有遇到这种情况,因为您正在本地测试,并且没有真正的网络延迟。这就是插座的困难所在

您需要循环Receive,直到收到所有内容。但是,只有创建一个自定义协议层,为接收方提供完成消息所需的字节数,才能知道您已经收到了所有信息

试试我的开源库SimpleSockets。它为您正确地构建了信息框架,避免了上述问题

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

string result = Encoding.UTF8.GetString(bytes[]);

这只是为了测试的目的。我在int k=s.Receive(b)下添加了while循环;然后,当我只需要一个数据时,控制台垃圾邮件显示我收到的数据。如何对其进行编码,使其“等待我的发送”,并且只向控制台显示一个条目而不是垃圾邮件?如上所述,您需要在将其输出到控制台之前接收完整的消息。这意味着您需要创建一个协议层,它告诉您的接收者要遵循多少字节才能完成消息。我的库会自动为您完成这一切,但没有任何东西可以阻止您亲自尝试或使用我的代码作为示例。:)
string result = Encoding.UTF8.GetString(bytes[]);