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

求救!!Socket只能接受一次值、。

我的客户端上线能发送数据到客户端,可是第二次服务器就不能接收了。客户端是短连接。      

客户端: 发送数据 
      IPAddress IPs = IPAddress.Parse("127.0.0.1");
            int Port = 2000;
            IPEndPoint ipe = new IPEndPoint(IPs, Port);//把ip和端口转化为IPEndPoint实例
            string mes = "Auditor" + "*" + Code + "*" + WorkNum + "*" + Str + "*" + ID + "*";

            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
            client.BeginConnect(ipe, new AsyncCallback(Connect), client);
            connectDone.WaitOne();  //连接完毕

            byte[] sendDate = System.Text.Encoding.UTF8.GetBytes(mes);
            client.BeginSend(sendDate, 0, sendDate.Length, 0,
                      new AsyncCallback(SendCallback), client);
            sendDone.WaitOne();     //发送完毕

            client.Shutdown(SocketShutdown.Both);
            client.Close();


服务器端: Thread listenThread = new Thread(Listen);
            listenThread.Start();

  /// <summary>
        /// 监听函数
        /// </summary>
        public void Listen()
        {
            try
            {
                //端口号
                int port = 2000;
                string host = "127.0.0.1";
                IPAddress ip = IPAddress.Parse(host);
                //初始化终结点实例 
                IPEndPoint localEP = new IPEndPoint(ip, port);
                mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                try
                {
                    while (true)
                    {
                        //绑定 
                        mySocket.Bind(localEP);
                        //监听 
                        mySocket.Listen(50);
                        //开始接受数据
                        mySocket.BeginAccept(new AsyncCallback(AcceptCallback), mySocket);
                        //接受已经完成
                        receiveDone.WaitOne();
                        mySocket.Shutdown(SocketShutdown.Both);
                        mySocket.Close();
                    }

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
我这是刚刚接触Socket。。。实在是不明不白啊!求大神救命啊! --------------------编程问答--------------------         /// <summary>
        /// 连接回调函数
        /// </summary>
        /// <param name="iar"></param>
        void Connect(IAsyncResult iar)
        {
            Socket client = (Socket)iar.AsyncState;
            try
            {
                client.EndConnect(iar);
                connectDone.Set();
            }
            catch (SocketException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// 发送回调函数
        /// </summary>
        /// <param name="ar"></param>
        private static void SendCallback(IAsyncResult ar)
        {
            try
            {
                Socket client = (Socket)ar.AsyncState;
                int bytesSent = client.EndSend(ar);
                sendDone.Set();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }





 /// <summary>
        /// 接受数据回调函数
        /// </summary>
        /// <param name="socketClientPara"></param>
        private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                StateObject state = (StateObject)ar.AsyncState;
                Socket client = state.workSocket;
                int recv = 0;
                try
                {
                    recv = client.EndReceive(ar);
                }
                catch
                {
                    MessageBox.Show("aaaa");
                    return;
                }
                if (recv > 0)
                {
                    state.sb.Append(System.Text.Encoding.UTF8.GetString(state.buffer, 0, 230));
                    client.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), state);
                }
                else
                {
                    if (state.sb.Length > 1)
                    {
                        //数据转换信息
                        string Mes = state.sb.ToString();
 }
    }
                    receiveDone.Set();






--------------------编程问答-------------------- 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。  这是我的错误。。。。。自己给自己顶了!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,