socket的初入门(一)

先说下服务端吧如下

        private static void Service()
        {
            int revc = 0;
            byte[] mess = new byte[9999];
            IPEndPoint oIPEndPoint = new IPEndPoint(IPAddress.Any, 9999);
            Socket oSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            oSocket.Bind(oIPEndPoint);//开始监听的服务端IP
            oSocket.Listen(100);//挂起的列队长度
            Console.WriteLine("等待客户端介入....");
            Socket oSocketClient = oSocket.Accept();//当有客户端连接的时候返回一个新的socket给他使用通信
            IPEndPoint oIPEndPointClient = (IPEndPoint)oSocketClient.RemoteEndPoint;//获取服务器的IP和端口
            Console.WriteLine("客户端:"+oIPEndPointClient.Address+"端口:"+oIPEndPointClient.Port+"进入服务器");
            string strWelcome = "欢迎进入";
            mess = Encoding.UTF8.GetBytes(strWelcome);
            oSocketClient.Send(mess,mess.Length,SocketFlags.None);//发送消息
            while (true)
            {
                try
                {
                    mess = new byte[1024];
                    revc = oSocketClient.Receive(mess);
                    if (revc == 0)
                    {
                        break;
                    }
                    Console.WriteLine(Encoding.UTF8.GetString(mess, 0, revc));
                    oSocketClient.Send(mess, revc, SocketFlags.None);
                }
                catch (Exception)
                {
                   break;
                }
            }

            Console.WriteLine("断开连接:"+oIPEndPointClient.Address);
            oSocketClient.Close();
            oSocket.Close();
            Console.ReadLine();

        }

  然后是客户端

        private static void Client()
        {
            byte[] data = new byte[9999];
            
            Socket oSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Console.WriteLine("请输入服务端IP");
            string strIP = Console.ReadLine();
            Console.WriteLine("请输入端口");
            int iPost = Convert.ToInt32(Console.ReadLine());
            IPEndPoint oIPEndPoint = new IPEndPoint(IPAddress.Parse(strIP), 9999);
            try
            {
                oSocket.Connect(oIPEndPoint);
            }
            catch (Exception ex)
            {
                Console.WriteLine("无法连接服务器,错误原因:"+ex.Message);
                return;
            }
            int revc = oSocket.Receive(data);
            Console.WriteLine(Encoding.UTF8.GetString(data, 0, revc));
            while (true)
            {
                oSocket.Send(Encoding.UTF8.GetBytes(Console.ReadLine()));
                data = new byte[9999];
                oSocket.Shutdown(SocketShutdown.Both);
            }
 
            oSocket.Close();
            Console.ReadLine();
        }

  现在问题是客户端点X关闭之后服务端就异常了,异常原因是因为服务端在死循环去获取客户端的信息,客户端突然消失了让服务端爆发了异常。没想到如何解决,找百度大神看看有资料没。


作者:小胖李
出处:http://www.cnblogs.com/minCS/
本文版权归作者和博客园共有,禁止转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

原文地址:https://www.cnblogs.com/minCS/p/3115189.html