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. }  

 程序执行结果截图:

   

          服务器端执行结果

         客户端执行结果

原文地址:https://www.cnblogs.com/lkskevin/p/2524569.html