作为服务器端,现在已经接收到了从客户端发来的消息数据,也就是下面代码中msg变量的值,但是我不会把它解析出来,
客户端是一个GPS车载定位设备,向服务器端发送报文。服务器端接受数据,并且要把数据解析出来,比如时间,速度,经度,纬度等等。服务器端代码如下:
namespace SocketFive
{
    public partial class SocketFive : Form
    {
        public SocketFive()
        {
            InitializeComponent();
        }
        public static string message = "ABC&";
        public static string response = "";
        private void Listen()
        {
                       IPAddress localAddr = IPAddress.Parse("192.168.0.205");
            Int32 port = 11000;
            TcpListener tcpListener = new TcpListener(localAddr, port);
            //开始侦听
            tcpListener.Start();
            //返回可以用以处理连接的Socket实例  
            Socket socketForClient = tcpListener.AcceptSocket();
            try
            {
                //如果返回值是"true",则产生的套节字已经接受来自远方的连接请求 
                if (socketForClient.Connected)
                {                    while (true)
                    {
                        //创建networkStream对象通过网络套节字来接受和发送数据 
                        NetworkStream ns = new NetworkStream(socketForClient);
                       
                        //从当前数据流中读取一行字符,返回值是字符串 
                        StreamReader sr = new StreamReader(ns);
                        string msg = sr.ReadLine();
                        
                        message += msg+"&";
                        MessageBox.Show(message);
                        response = "1";
                        StreamWriter sw = new StreamWriter(ns);
                        if (response != "")
                        {                            //往当前的数据流中写入一行字符串 
                            sw.WriteLine(response);
                            //刷新当前数据流中的数据  
                            sw.Flush();
                        }
                        sr.Close();
                        
                    }
                    
                }
                
            }
            catch (Exception ey)
            {
                MessageBox.Show(ey.ToString());
            }
        }        private void btnStart_Click(object sender, EventArgs e)
        {
            Thread _thread = new Thread(new ThreadStart(Listen));
            _thread.Start();
           
        }
    }
}

解决方案 »

  1.   

    没人给些建议吗?我第一次用socket,满头雾水。
      

  2.   

    你需要知道客户端发送数据的数据类型及数据格式。当服务端接收到数据时,根据相关的格式进行转换。而不能只用string类型进行接收。
      

  3.   

    哦,谢谢,现在我手头有份这个Gps车载定位设备的数据报文协议,上面写了些GPS数据包格式和报文格式,但看不懂啊,所以我是这样想,不管客户端发送的是什么格式的数据,但是传输的总是二进制数据吧,我写服务器端测试程序的时候,只要把二进制数据分析出来不就可以了嘛,呵呵,个人浅见,原来没接触过这些底层的玩意。下面是我配置好实际的车载设备放屋里,开启另一个现成的服务器端程序,接收到的数据如下:我现在主要想分析出客户端位置来,也就是经度纬度之类的。其中18601234567是客户端的SIM卡号也就是手机号。
    2010-4-10 10:08:13: 376: ~?11111118601234567    ~
    2010-4-10 10:09:24: 376: ~?11111118601234567    ~
    2010-4-10 10:09:54: 376: ~?11111118601234567    ~
    2010-4-10 10:10:24: 376: ~?11111118601234567    ~
    2010-4-10 10:11:35: 376: ~?11111118601234567    ~
    2010-4-10 10:12:04: 376: ~?11111118601234567    ~
    2010-4-10 10:12:35: 376: ~?11111118601234567    ~
    2010-4-10 10:14:06: 376: ~?11111118601234567    ~
    2010-4-10 10:14:36: 376: ~?11111118601234567    ~
    2010-4-10 10:15:06: 376: ~?11111118601234567    ~
    2010-4-10 10:16:17: 376: ~?11111118601234567    ~
    2010-4-10 10:16:47: 376: ~?11111118601234567    ~
    2010-4-10 10:17:17: 376: ~?11111118601234567    ~