专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C#

socket解决办法

发布时间:2011-06-21 11:33:39 文章来源:www.iduyao.cn 采编人员:星星草
socket
int port = 8007;
  string host = "192.168.9.63";
  IPAddress ip = IPAddress.Parse(host);
  IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
  Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
  Console.WriteLine("Conneting...");
  c.Connect(ipe);//连接到服务器
  string sendStr = "1111111111111111111111111111111111111111111111111111";
   
  Encoding gb2312 = Encoding.GetEncoding("gb2312");
  byte[] sendStrbytes = gb2312.GetBytes(sendStr);
  string StrLen = sendStrbytes.Length.ToString();
  byte[] sendStrlen = gb2312.GetBytes(StrLen);
  c.Send(sendStrlen, sendStrlen.Length, 0);//发送测试信息
   


  Console.WriteLine("SendMessage");
  c.Send(sendStrbytes, sendStrbytes.Length, 0);//发送测试信息
  byte [] recievelen=new byte [32];
   
  c.Receive(recievelen);
//
   
  string lenth = System.Text.Encoding.Default.GetString(recievelen);
  MessageBox.Show(lenth);
  //byte[] recievedata = new byte[Convert.ToInt32(lenth)];
  byte[] recievedata = new byte[87];
  c.Receive(recievedata);
   

  string rec = gb2312.GetString(recievedata);

  MessageBox.Show(rec);

服务器只将接受到的数据转出给PC机,但PC接收数据时总是多一点多了一堆乱码:如前台发送
中TRCD1111112中2中2中2中2中国11dddd1111111111111111111111111111111111111111111111111111
则返回的数据为:
◥<t镴谼=t87纔<t8篚穃瀀(y<t镴
中TRCD1111112中2中2中2中2中国11dddd1111111111111111111111111111111111111111111111111111
搞不清


------解决方案--------------------
通讯没问题 字符集的问题
------解决方案--------------------
string lenth = System.Text.Encoding.Default.GetString(recievelen);

这个问题..
你发送的时候用了gb2312 接收的时候使用了ANSI自然出乱码
------解决方案--------------------
那就可能是接收时溢出了
你可以接收是限定下长度 或者通过循环来分段接受
------解决方案--------------------
用utf8或者default试一下
------解决方案--------------------
arrau.clear(buffer);
------解决方案--------------------
探讨
arrau.clear(buffer);

------解决方案--------------------
内存变量没有清零,或者内存指针位置不正确。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: