日期:2014-05-17  浏览次数:20845 次

在线急求。。C# byte[] 转换成string 的问题
我用java做服务端,c#做客户端,socket之间进行通讯,java那边用
ServerSocket m=new ServerSocket(PORT);
Socket s=m.accept();//返回客户端的socket
PrintStream ps=new PrintStream(s.getOutputStream());
ps.println("1");//向客户端发送字符串"1";

C#客户端接收服务器发来的信息:
 //创建TcpClient对象
TcpClient client = new TcpClient("127.0.0.1", 30000);
NetworkStream ns = client.GetStream();
byte[] buffer = new byte[64];
ns.Read(buffer, 0, buffer.Length);
string checkName = Encoding.BigEndianUnicode.GetString(buffer);
if (checkName.Equals("1"))这个返回的总是错的,这是为什么,很急。。。。。

------解决方案--------------------
checkName的值是什么?
------解决方案--------------------
引用:
引用:
checkName的值是什么?把buffer抓换成string用checkName保存下来啊

我是说你调试的时候,checkName里面的值是多少
------解决方案--------------------
(别的bug先不说)至少你接收到的字节数要正确,假设接收到1个字节就不要胡乱用64个字节。

至少你可以写
var len= ns.Read(buffer, 0, buffer.Length);
 string checkName = Encoding.BigEndianUnicode.GetString(buffer, 0, len);


另外,你怎知道是Encoding.BigEndianUnicode而不是 Encoding.UTF8(或者其它)呢?这个也是一个问题。我更觉得你编程序就是靠“瞎蒙”,不了解机制。
------解决方案--------------------
var len= ns.Read(buffer, 0, buffer.Length);
 string checkName = Encoding.BigEndianUnicode.GetString(buffer, 0, len);

------解决方案--------------------
楼上的正解啊,可以直接
int len = client.Read(buffer);
string checkName = Encoding.BigEndianUnicode.GetString(buffer, 0, len);
------解决方案--------------------
string checkName = Encoding.UTF8.GetString(buffer).Replace("\r\n","").Replace("\0","");
他有给你加了"\r\n"所以要过虑掉
------解决方案--------------------
int len = client.Read(buffer);
string checkName = Encoding.UTF8.GetString(buffer, 0, len).Replace("\r\n","");