gpt4 book ai didi

c#如何从字节中获取字符串?

转载 作者:行者123 更新时间:2023-12-03 11:58:14 25 4
gpt4 key购买 nike

我有一个表单控制台应用程序,它为发送和接收执行 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 部分
从这个意义上说,我怎样才能让它总是“等待”另一个客户的响应
并且不会将我的 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 :"));
}

最佳答案

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

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

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

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

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

关于c#如何从字节中获取字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19944914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com