zoukankan      html  css  js  c++  java
  • 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/
    本文版权归作者和博客园共有,禁止转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     

  • 相关阅读:
    [Swift]LeetCode20. 有效的括号 | Valid Parentheses
    [Swift]LeetCode14. 最长公共前缀 | Longest Common Prefix
    [Swift]LeetCode13. 罗马数字转整数 | Roman to Integer
    [Swift]LeetCode9. 回文数 | Palindrome Number
    [Swift]LeetCode7. 反转整数 | Reverse Integer
    [Swift]LeetCode2. 两数相加 | Add Two Numbers
    [Swift]LeetCode1 .两数之和 | Two Sum
    3人小公司1年的创业成本
    3人小公司1年的创业成本
    OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
  • 原文地址:https://www.cnblogs.com/minCS/p/3115189.html
Copyright © 2011-2022 走看看