码迷,mamicode.com
首页 > Web开发 > 详细

.Net之美读书笔记10(网络编程一)

时间:2018-01-19 16:48:18      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:ddr   状态   面向连接   netstat   void   listen   enc   parse   category   

网络编程(Socket)

这里对网络编程做下简单的整理,填补下自己这方面的知识空白。如果想了解请参考张子阳的.Net之美.
***
概念讲述

  • TCP:面向连接的传输协议(网络协议的一种)
  • 远程主机: 跨进程访问即为远程访问
  • 套接字: 传输层与应用层的纽带,可使应用层编程不用关心传输层

    服务器与客户端链接

    服务端开启监听服务,客户端链接服务端。新建两个控制台程序Server/Client。
    Server:

    static void Main(string[] args)
        {
            Console.WriteLine("Server is running ...");
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            int port = 8500;
    
            TcpListener listener = new TcpListener(ip, port);
            listener.Start();
    
            Console.WriteLine("\n\n Enter \"Q\" exit.");
            ConsoleKey key;
            do
            {
                key = Console.ReadKey(true).Key;
            } while (key != ConsoleKey.Q);
        }

    Client:

    static void Main(string[] args)
        {
            Console.WriteLine("Client Running");
    
            TcpClient client = new TcpClient();
    
            IPAddress serverIp = IPAddress.Parse("127.0.0.1");
            int serverPort = 8500;
    
            try
            {
                client.Connect(serverIp, serverPort);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }
    
            Console.WriteLine("Server Connected!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
    
            Console.WriteLine("\n\n Enter \"Q\" exit.");
            ConsoleKey key;
            do
            {
                key = Console.ReadKey(true).Key;
            } while (key != ConsoleKey.Q);
        }

    命令行运行netstat -a查看端口连接状态

    服务端获取客户端链接

    AcceptTcpClient()为阻塞方法,调用后线程等待客户端链接
    Server:

        static void Main(string[] args)
        {
            Console.WriteLine("Server is running ...");
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            int port = 8500;
    
            TcpListener listener = new TcpListener(ip, port);
            listener.Start();
            Console.WriteLine("Start Listening ...");
    
            //目的获取多个客户端信息
            while(true)
            {
                try
                {
                    //获取一个连接,中断方法(等待客户端的链接)
                    TcpClient remoteClient = listener.AcceptTcpClient();
                    //打印链接到的客户端信息
                    Console.WriteLine("Client Connected!{0}<-{1}", remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error:" + ex.Message);
                }
            }
        }

    客户端发送信息服务端接受

    Server:

    static void Main(string[] args)
        {
            int BufferSize = 8192;
    
            Console.WriteLine("Server is running ...");
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            int port = 8500;
    
            TcpListener listener = new TcpListener(ip, port);
            listener.Start();
            Console.WriteLine("Start Listening ...");
    
            //目的获取多个客户端信息
            while(true)
            {
                try
                {
                    //获取一个连接,中断方法(等待客户端的链接)
                    TcpClient remoteClient = listener.AcceptTcpClient();
                    //打印链接到的客户端信息
                    Console.WriteLine("Client Connected!{0}<-{1}", remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint);
    
                    //获得流并写入buffer中
                    NetworkStream streamToClient = remoteClient.GetStream();
                    byte[] buffer = new byte[BufferSize];
                    int bytesRead = streamToClient.Read(buffer, 0, buffer.Length);
                    Console.WriteLine("Reading data,{0}bytes",bytesRead);
    
                    //获得请求的字符串
                    string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);
                    Console.WriteLine("Received:{0}",msg);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error:" + ex.Message);
                }
            }
        }

    Client:

    static void Main(string[] args)
        {
            Console.WriteLine("Client Running");
    
            TcpClient client = new TcpClient();
    
            IPAddress serverIp = IPAddress.Parse("127.0.0.1");
            int serverPort = 8500;
    
            try
            {
                client.Connect(serverIp, serverPort);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }
    
            Console.WriteLine("Server Connected!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
    
            string msg = "\"Welcome To TraceFact.Net\"";
            NetworkStream streamToServer = client.GetStream();
    
            byte[] buffer = Encoding.Unicode.GetBytes(msg);
            streamToServer.Write(buffer, 0, buffer.Length);
            Console.WriteLine("Sent:{0}",msg);
            Console.WriteLine("\n\n Enter \"Q\" exit.");
            ConsoleKey key;
            do
            {
                key = Console.ReadKey(true).Key;
            } while (key != ConsoleKey.Q);
        }

.Net之美读书笔记10(网络编程一)

标签:ddr   状态   面向连接   netstat   void   listen   enc   parse   category   

原文地址:https://www.cnblogs.com/LoveTomato/p/8317379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!