C# Socket服务端接收16进制乱码
Socket temp = s.Accept();//为新建连接创建新的socket
Console.WriteLine("建立连接");
string recvStr = "";
byte[] recvBytes = new byte[2048];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine("时间"+DateTime.Now+" 服务器获取数据:{0}", recvStr);//把客户端传来的信息显示出来
客户端发送的16进制数据 就会变成乱码
不是16进制就好好的 ,本人新手 希望大侠们 帮忙解决下 --------------------编程问答-------------------- 耐心等待大虾们的出现 --------------------编程问答-------------------- 没时间细看
参考
http://blog.163.com/epeda@126/blog/static/4180347820118604343550/ --------------------编程问答-------------------- 我和你一样的问题。等待高人解答。 --------------------编程问答-------------------- 你是要打印接收到的16进制内容?还是要打印出接收到的数据字符串?
如果对方发送的是16进制的内容,你要看数据是什么类型的(string?double?int?),然后再看对应的类型占用了几个字节,最后才把对应的字节数转换到相应的类型上。
--------------------编程问答-------------------- 红色标记的16进制圈,勾上后 发送到我这边的数据就不对了 就是乱码 不勾上就是好好的 现在我们做的就是对方发来16进制的数据 让我读出来 --------------------编程问答-------------------- 我想问下。我设置一个服务端,一个客户端。
服务端代码private void button1_Click(object sender, EventArgs e)
{
IPAddress localip = IPAddress.Parse("10.11.1.2");
IPEndPoint ipep = new IPEndPoint(localip,6000);//
Socket server1 = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
server1.Bind(ipep);//参数为主机对象 IPEndPoint
server1.Listen(50);//参数整型数值,挂起队列最大值
Socket clientsocket = server1.Accept();//接收客户端的连接请求
byte[] sendd1 = new byte[1024];
string senddata1 = "hi";
sendd1 = ASCIIEncoding.ASCII.GetBytes(senddata1);
byte[] sendd2 = new byte[1024];
string senddata2 = "no problem";
sendd2 = ASCIIEncoding.ASCII.GetBytes(senddata2);
byte[] received = new byte[1024];
clientsocket.Receive(received,received.Length,0);
string receivedata = Encoding.BigEndianUnicode.GetString(received);//.BigEndianUnicode.GetString(received);
richTextBox1.AppendText(receivedata+"收到的消息"+"\r\n");
} --------------------编程问答-------------------- 客户端 private void button1_Click(object sender, EventArgs e)
{
IPAddress ipin = IPAddress.Parse("10.11.1.2");
IPEndPoint ipep = new IPEndPoint(ipin,6000);
Socket clienta = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
clienta.Connect(ipep);
string senddata1 =textBox1.Text ;
byte[] senddata2 = new byte[1024];
senddata2 = ASCIIEncoding.ASCII.GetBytes(senddata1);
clienta.Send(senddata2);
richTextBox1.AppendText(senddata1+"发送成功!"+"\r\n");
} --------------------编程问答-------------------- 上面的图 发错了 --------------------编程问答-------------------- 电文格式有吗? --------------------编程问答-------------------- Encoding.ASCII.GetString
主要看编码格式
在网络上都是以流进行传输
--------------------编程问答--------------------
希望可以帮我弄下 麻烦了 我不太会,.. --------------------编程问答-------------------- 服务器只能接收一个客户端发的消息就断开了。再接收就报错套接字只能一次。收到的也是乱码。求解一;
--------------------编程问答--------------------
你在客户端 加个while(true)循环就好了 0 0 ,,
谁来帮我解决下问题呀 ..愁死了 . --------------------编程问答-------------------- --------------------编程问答--------------------
乱码问题是因为你客户端的编码是用:ASCIIEncoding.ASCII.GetBytes(senddata1);
而服务器解码的编码格式是:Encoding.BigEndianUnicode.GetString(received);
所以,乱码是必然的,这两个要一致/ --------------------编程问答-------------------- 你是工作还是自己学习啊?
--------------------编程问答-------------------- 你在客户端 加个while(true)循环就好了 0 0 ,,
谁来帮我解决下问题呀 ..愁死了 .
[/Quote]
那个图是模拟程序吧,对方难道没有给你电文的协议?就是电文格式? --------------------编程问答-------------------- 我修改了。客户端senddata2 = ASCIIEncoding.ASCII.GetBytes(senddata1);
服务端string receivedata = ASCIIEncoding.ASCII.GetString(received);
结果显示正常了。谢谢啦。 --------------------编程问答-------------------- 求加QQ。我有电文的协议。给我解答下问题。现在一堆问题。
--------------------编程问答-------------------- 我在搞串口和TCP通信。搞了一个星期了,。头都大了。一个人自学。 --------------------编程问答-------------------- QQ:10482523,你可以加我QQ,我给你发一个多线程_异步的通讯例子. --------------------编程问答-------------------- 我的QQ743490149 --------------------编程问答--------------------
public static string byteToHexStr(byte[] bytes,int count)用上面的方法把字节转下 就好了 能正常显示了
{
string returnStr = "";
if (bytes != null)
{
for (int i = 0; i < count; i++)
{
returnStr += bytes[i].ToString("X2");
}
}
return returnStr;
}
tcp终于搞定了 下面又得搞udp了 真蛋疼.
感谢OROCHIHeart,dhxyxiaofeng感谢大家
补充:.NET技术 , C#