当前位置:编程学习 > C#/ASP.NET >>

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

主要看编码格式

在网络上都是以流进行传输
--------------------编程问答--------------------
引用 10 楼  的回复:
Encoding.ASCII.GetString

主要看编码格式

在网络上都是以流进行传输

希望可以帮我弄下 麻烦了 我不太会,.. --------------------编程问答-------------------- 服务器只能接收一个客户端发的消息就断开了。再接收就报错套接字只能一次。收到的也是乱码。求解一;
--------------------编程问答--------------------
引用 12 楼  的回复:
服务器只能接收一个客户端发的消息就断开了。再接收就报错套接字只能一次。收到的也是乱码。求解一;

你在客户端 加个while(true)循环就好了 0 0  ,,
谁来帮我解决下问题呀 ..愁死了 . --------------------编程问答-------------------- --------------------编程问答--------------------
引用 12 楼 beyondboss 的回复:
服务器只能接收一个客户端发的消息就断开了。再接收就报错套接字只能一次。收到的也是乱码。求解一;


乱码问题是因为你客户端的编码是用: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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,