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);

}
}
求各位大神帮忙看看
展开
 我来答
路有时不在脚下
推荐于2016-02-20 · 超过25用户采纳过TA的回答
知道答主
回答量:135
采纳率:0%
帮助的人:36万
展开全部
你在读取数据流的时候先判断下当前流中有多少字节(tempSocket.Available的可供读取的数据量),就创建多少字节的byte数组,不然的话,你这样读取的数据(例如:流中可供读取的数据量是100,你直接存到b中,而你转换字符串时是将b全部转换,里面还有924个空字符)不能直接比较,需要把多余的空字符(你显示的长度是512就是这个原因)去掉后再比较才可以。
追问
我明白了。。。使用trim()时无法将'\0'去掉,所以我自己写了一个去掉'\0'的方法。问题解决了。
追答
对了!
zzyyxxaabbcc
2012-09-21 · TA获得超过3642个赞
知道大有可为答主
回答量:3542
采纳率:50%
帮助的人:3210万
展开全部
if (str.Equals("guest")) MessageBox.Show("尼玛能不能成功一次啊!");
这步,加断点,看一下str字符串内容,最好是查看一下str的长度是否是5.
追问
str内容为"guest",但是长度却是512。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fej121121
2012-09-21 · TA获得超过651个赞
知道小有建树答主
回答量:655
采纳率:66%
帮助的人:537万
展开全部
加个Trim试试?感觉你这编码没问题呀
追问
使用trim也没用,长度仍然为512。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式