zoukankan      html  css  js  c++  java
  • C#网络编程最简单的基于cs的sokect通讯程序

    程序中 常用方法列表:
                 (1)Socket(AddressFamily af,SocketType st,ProtocolType pt)
                      创建套接字,并且返回新建套接字句柄st。对于客户端来说,也是在本地创建套接字。
                (2)bind(IPEndPoint iep)
                     对于服务器方的程序来说,建立的套接字必须要绑定到本地计算机的IP地址和端口号上。
                  (3)listen(int backlog)
                    这个方法用于等待客户端发出连接的请求,待其执行完则说明服务器方已经准备好受     来自客户端的连接。

                    其中的backlog参数是指用户的连接数,超过连接数的  其他客户不得与服务器方进一步通信。
                (4)accept()
                    它的功能是,当有新客户连接时,返回一个新的套接字句柄。当程序执行到该方法时会  处于阻塞状态, 直到有

                    新的客户机请求连接,accept()方法会返回包含客户端信息的套接字句柄。
                (5)connect(IPEndPoint iep)
                     此方法是客户机独有的,它负责把自己新创建的套接字与本地地址相绑定,与bind()方法相对应。
                  (6)Send()/Receive()
                     这两个方法在完成了客户端的连接后,就可以通过它们进行数据传送了。
                   (7)ShutDown()
                     这个方法在通信完成以后负责把连接释放,并关闭socket对象。

     程序逻辑流程图:

             

              程序逻辑流程图
        

    服务器端代码:

                     

    [c-sharp] view plaincopy
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Linq;  
    4. using System.Text;  
    5. using System.Net;  
    6. using System.Net.Sockets;  
    7.   
    8. namespace SocketServerTest11  
    9. {  
    10.     class Program  
    11.     {  
    12.         static void Main(string[] args)  
    13.         {  
    14.                 
    15.            int port = 5800;  
    16.            string host = "192.168.5.187";  
    17.   
    18.            //创建终结点(EndPoint)  
    19.            IPAddress ip = IPAddress.Parse(host); //把ip地址字符串转换为IPAddress类型的实例  
    20.             //用指定的端口和ip初始化IPEndPoint类的新实例  
    21.             IPEndPoint ipe = new IPEndPoint(ip, port);   
    22.               
    23.            //创建socket并开始监听  
    24.             //创建一个socket对象,如果用udp协议,则要用SocketType.Dgram类型的套接字  
    25.             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,  
    26.            ProtocolType.Tcp);  
    27.            s.Bind(ipe); //绑定EndPoint对象(5800端口和ip地址)  
    28.             s.Listen(0); //开始监听  
    29.             Console.WriteLine("等待客户端连接");  
    30.   
    31.            //接收到client连接,为此连接建立新的socket,并接受信息  
    32.             Socket temp = s.Accept();//为新建连接创建新的socket  
    33.            Console.WriteLine("建立连接");  
    34.            string recvStr = "";  
    35.            byte[] recvBytes = new byte[1024];  
    36.            int bytes;  
    37.            bytes = temp.Receive(recvBytes, recvBytes.Length, 0); //从客户端接受信息  
    38.             recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);  
    39.   
    40.            //给Client端返回信息  
    41.             Console.WriteLine("server get message:{0}", recvStr); //把客户端传来的信息显示出来  
    42.             string sendStr = "ok!Client send message successful!";  
    43.            byte[] bs = Encoding.ASCII.GetBytes(sendStr);  
    44.            temp.Send(bs, bs.Length, 0);//返回信息给客户端  
    45.             temp.Close();  
    46.            s.Close();  
    47.            Console.ReadKey();  
    48.   
    49.         }  
    50.     }  
    51. }  

    客户端端代码:

    [c-sharp] view plaincopy
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Linq;  
    4. using System.Text;  
    5. using System.Net;  
    6. using System.Net.Sockets;  
    7.   
    8. namespace SocketClientTest11  
    9. {  
    10.     class Program  
    11.     {  
    12.         static void Main(string[] args)  
    13.         {  
    14.             try  
    15.             {  
    16.                 int port = 5800;  
    17.                 string host = "192.168.5.187";  
    18.                 //创建终结点EndPoint  
    19.                 IPAddress ip = IPAddress.Parse(host);  
    20.                 IPEndPoint ipe = new IPEndPoint(ip, port); //把ip和端口转换为IPEndpoint  
    21.                 实例  
    22.   
    23.                   //创建socket并连接到服务器  
    24.                   Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream,     
    25.                 ProtocolType.Tcp);   
    26.                //创建Socket  
    27.                 Console.WriteLine("Connecting...");  
    28.                 c.Connect(ipe);//连接到服务器  
    29.   
    30.                 //向服务器发送信息  
    31.                 string sendStr = "hello!This is a socket test";  
    32.               byte[] bs = Encoding.ASCII.GetBytes(sendStr); //把字符串编码为字节  
    33.                 Console.WriteLine("Send Message");  
    34.               c.Send(bs, bs.Length, 0); //发送信息  
    35.   
    36.                 //接受从服务器返回的信息  
    37.                 string recvStr = "";  
    38.               byte[] recvBytes = new byte[1024];  
    39.               int bytes;  
    40.               bytes = c.Receive(recvBytes, recvBytes.Length, 0); //从服务器端接受返回信息  
    41.                 recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);  
    42.               Console.WriteLine("client get message:{0}", recvStr); //显示服务器返回信息  
    43.                 //一定记着用完socket后要关闭  
    44.                 c.Close();  
    45.   
    46.             }  
    47.             catch (ArgumentNullException e)  
    48.             {  
    49.                 Console.WriteLine("argumentNullException:{0}", e);  
    50.             }  
    51.             catch (SocketException e)  
    52.             {  
    53.                 Console.WriteLine("SocketException:{0}", e);  
    54.             }  
    55.             Console.WriteLine("Press Enter to Exit");  
    56.             Console.ReadKey();  
    57.         }  
    58.     }  
    59. }  

     程序执行结果截图:

       

              服务器端执行结果

             客户端执行结果

  • 相关阅读:
    文件I/O(不带缓冲)之write函数
    文件I/O(不带缓冲)之read函数
    webpack4.x版本splitChunksPlugin的配置项详解与实际应用场景
    关于使用express作为spa应用服务的问题
    url 的正则表达式:path-to-regexp
    node.js、js读取excel、操作excel、创建excel之js-xlsx.js
    Web前端之iframe详解
    html中的meta标签是什么?有哪些属性?
    大型互联网架构概述,看完文章又涨知识了
    redis 的过期策略都有哪些?内存淘汰机制都有哪些?
  • 原文地址:https://www.cnblogs.com/lkskevin/p/2524569.html
Copyright © 2011-2022 走看看