作为服务器端测试程序,已经接收到客户端发来的数据,接收到数据之后需要向客户端做一个握手应答也就是发个确认过去,
刚测试了下,客户端的程序没显示应答内容,不知道错在哪里了,请帮忙,谢谢!
        public static string message = "ABC&";
        public static string response = "";
        private bool isListening = false;
        private Socket socket;
        private string text;
        private string _text = "";
        private string msg = "";       private void Listen()
        {            IPAddress localAddr = Dns.Resolve(Dns.GetHostName()).AddressList[0];
            Int32 port = 11000;
            TcpListener tcpListener = new TcpListener(localAddr, port);
            //开始侦听
            tcpListener.Start();
            try
            {                 //返回可以用以处理连接的Socket实例                  Socket socketForClient = tcpListener.AcceptSocket();                //如果返回值是"true",则产生的套节字已经接受来自远方的连接请求 
                if (socketForClient.Connected)
                {                    while (true)
                    {
                        //创建networkStream对象通过网络套节字来接受和发送数据 
                        NetworkStream ns = new NetworkStream(socketForClient);                        //从当前数据流中读取一行字符,返回值是字符串 
                        StreamReader sr = new StreamReader(ns);
                        msg = sr.ReadLine();
                        sr.Close();                       
                       
                                               /*向客户端回发数据开始*/                        //将响应信息以字节的方式发送到客户端  握手应答,也就是发个确认,起始字节0x7E也就是符号~,消息标识0x80也就是符号€,消息体长度4bytes。
                        //string _back = "7E80";
                        //socketForClient.Send(Encoding.UTF8.GetBytes(Convert.ToByte(_back, 16)));                        string _back = "~€";
                        socketForClient.Send(Encoding.UTF8.GetBytes(_back));
                        /*向客户端回发数据结束*/
                    }
                    
                }                socketForClient.Shutdown(SocketShutdown.Both);/*关闭连接*/
                socketForClient.Close();//释放资源            }
            catch (Exception ey)
            {
                MessageBox.Show(ey.ToString());
            }
            finally
            {
                tcpListener.Stop();            }
      }

解决方案 »

  1.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net.Sockets;
    using System.IO;
    using System.Threading;
    using System.Net; namespace SocketFive
    {
        public partial class SocketFive : Form
        {
            public SocketFive()
            {
                InitializeComponent();
            }
            public static string message = "ABC&";
            public static string response = "";
            private bool isListening = false;
            private Socket socket;
            private string text;
            private string _text = "";
            private string msg = "";
            private void Listen()
            {
                           //IPAddress localAddr = IPAddress.Parse("192.168.0.205");
                IPAddress localAddr = Dns.Resolve(Dns.GetHostName()).AddressList[0];
                Int32 port = 11000;
                TcpListener tcpListener = new TcpListener(localAddr, port);
                //开始侦听
                tcpListener.Start();
                //返回可以用以处理连接的Socket实例  
                //Socket socketForClient = tcpListener.AcceptSocket();
                try
                {
                    Socket socketForClient = tcpListener.AcceptSocket();                //如果返回值是"true",则产生的套节字已经接受来自远方的连接请求 
                    if (socketForClient.Connected)
                    {                    while (true)
                        {
                            //创建networkStream对象通过网络套节字来接受和发送数据 
                            NetworkStream ns = new NetworkStream(socketForClient);                        //从当前数据流中读取一行字符,返回值是字符串 
                            StreamReader sr = new StreamReader(ns);
                            msg = sr.ReadLine();
                            sr.Close();                        //message += msg+"&";
                            //MessageBox.Show(message);
                            //MessageBox.Show(msg);                        /*解析数据开始*/
                            byte[] buffer = new byte[1024];
                            if (msg != "")
                            {
                                for (int i = 0; i < msg.ToCharArray().Length; i++)
                                {
                                    char[] _data = msg.ToCharArray();
                                    buffer[i] = (byte)_data[i];
                                    _text += buffer[i].ToString("X2") + "_join_";
                                }                            //MessageBox.Show(_text);                        }                        MessageBox.Show(_text);                        msg = "";
                            _text = "";                                                /*解析数据结束*/                        
                            /*向客户端回发数据开始*/                        //将响应信息以字节的方式发送到客户端  握手应答,也就是发个确认,起始字节0x7E也就是符号~,消息标识0x80也就是符号€,消息体长度4bytes。
                            //string _back = "7E80";
                            //socketForClient.Send(Encoding.UTF8.GetBytes(Convert.ToByte(_back, 16)));                        string _back = "~€";
                            socketForClient.Send(Encoding.UTF8.GetBytes(_back));
                            /*向客户端回发数据结束*/
                        }
                        //MessageBox.Show(message);                }                socketForClient.Shutdown(SocketShutdown.Both);/*关闭连接*/
                    socketForClient.Close();//释放资源            }
                catch (Exception ey)
                {
                    MessageBox.Show(ey.ToString());
                }
                finally
                {
                    tcpListener.Stop();            }
            }        private void btnStart_Click(object sender, EventArgs e)
            {            isListening = true;
                Thread _thread = new Thread(new ThreadStart(Listen));
                _thread.Start();
               
            }
        }
    }
      

  2.   

    你既然已经获得了NetworkStream类型的对象sr,发送返回信息就一句 sr.Write(....) 就可以了。
      

  3.   

    哦,这样啊,我以为用socket.send()向客户端回发确认信息呢
      

  4.   

    我试试啊,我之前找到的例子是收到message后,重新建一个socket。感觉不太好。