C# socket传输字符串问题
我使用socket传输字符串,想对传输的内容进行判断,但是比较结果总是false,求大神帮忙看看。我觉得编码也没有问题的。部分代码如下://客户端代码……Streamst...
我使用socket传输字符串,想对传输的内容进行判断,但是比较结果总是false,求大神帮忙看看。我觉得编码也没有问题的。部分代码如下:
//客户端代码
……
Stream stm = tcpclient.GetStream();
byte[] b = Encoding.Unicode.GetBytes ( textBoxNickName.Text );
//textBoxNickName.Text 的内容为"guest"
stm.Write(b,0,b.Length);
……
//服务端代码
public void timer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
{
if (tcplistener.Pending())
{
Socket tempSocket = tcplistener.AcceptSocket();
byte [] b = new byte [1024];
tempSocket.Receive(b);
//b的内容为客户端传输的"guest",为unicode编码。
string str = Encoding.Unicode.GetString(b);
//将byte转为string类,unicode编码
richTextBoxContent.AppendText(tempSocket.RemoteEndPoint.ToString() + " connected." + Environment.NewLine);
if (mySocket.ContainsKey(str))//判断用户名是否已经存在
{
tempSocket.Send(Encoding.Unicode.GetBytes ("NameError"));
return;
}
if (str.Equals("guest")) MessageBox.Show("尼玛能不能成功一次啊!");
//str的内容的确为"guest",但是无法与"guest"判等。我觉得还是有可能是编码问题。
mySocket.Add(str,tempSocket);
}
}
求各位大神帮忙看看 展开
//客户端代码
……
Stream stm = tcpclient.GetStream();
byte[] b = Encoding.Unicode.GetBytes ( textBoxNickName.Text );
//textBoxNickName.Text 的内容为"guest"
stm.Write(b,0,b.Length);
……
//服务端代码
public void timer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
{
if (tcplistener.Pending())
{
Socket tempSocket = tcplistener.AcceptSocket();
byte [] b = new byte [1024];
tempSocket.Receive(b);
//b的内容为客户端传输的"guest",为unicode编码。
string str = Encoding.Unicode.GetString(b);
//将byte转为string类,unicode编码
richTextBoxContent.AppendText(tempSocket.RemoteEndPoint.ToString() + " connected." + Environment.NewLine);
if (mySocket.ContainsKey(str))//判断用户名是否已经存在
{
tempSocket.Send(Encoding.Unicode.GetBytes ("NameError"));
return;
}
if (str.Equals("guest")) MessageBox.Show("尼玛能不能成功一次啊!");
//str的内容的确为"guest",但是无法与"guest"判等。我觉得还是有可能是编码问题。
mySocket.Add(str,tempSocket);
}
}
求各位大神帮忙看看 展开
3个回答
展开全部
你在读取数据流的时候先判断下当前流中有多少字节(tempSocket.Available的可供读取的数据量),就创建多少字节的byte数组,不然的话,你这样读取的数据(例如:流中可供读取的数据量是100,你直接存到b中,而你转换字符串时是将b全部转换,里面还有924个空字符)不能直接比较,需要把多余的空字符(你显示的长度是512就是这个原因)去掉后再比较才可以。
追问
我明白了。。。使用trim()时无法将'\0'去掉,所以我自己写了一个去掉'\0'的方法。问题解决了。
追答
对了!
展开全部
if (str.Equals("guest")) MessageBox.Show("尼玛能不能成功一次啊!");
这步,加断点,看一下str字符串内容,最好是查看一下str的长度是否是5.
这步,加断点,看一下str字符串内容,最好是查看一下str的长度是否是5.
追问
str内容为"guest",但是长度却是512。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加个Trim试试?感觉你这编码没问题呀
追问
使用trim也没用,长度仍然为512。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询