C# 如何从字节中获取字符串?
我有一个表单控制台应用程序,它执行发送和接收的TCP套接字连接。 我需要帮助获取以下对字符串的响应。 下面的代码将响应写入控制台,但我也希望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
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;iString 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[]);