四联光电智能照明论坛

标题: C#版 Socket编程(最简单的Socket通信功能 [打印本页]

作者: Xiaoxue    时间: 2016-11-8 20:50
标题: C#版 Socket编程(最简单的Socket通信功能

示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息;
这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别。
下面是示例程序的简单步骤说明

服务器端:
第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第二步:建立一个Socket对像;
第三步:用socket对像的Bind()方法绑定EndPoint;
第四步:用socket对像的Listen()方法开始监听;
第五步:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;
第六步:通信结束后一定记得关闭socket;
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. namespace server
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.        {
  12.             int port = 2000;
  13.             string host = "127.0.0.1";

  14.        ///创建终结点(EndPoint)
  15.             IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
  16.             IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例

  17.          ///创建socket并开始监听
  18.             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
  19.             s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
  20.             s.Listen(0);//开始监听
  21.             Console.WriteLine("等待客户端连接");

  22.          ///接受到client连接,为此连接建立新的socket,并接受信息
  23.             Socket temp = s.Accept();//为新建连接创建新的socket
  24.             Console.WriteLine("建立连接");
  25.             string recvStr = "";
  26.             byte[] recvBytes = new byte[1024];
  27.             int bytes;
  28.             bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
  29.             recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

  30.          ///给client端返回信息
  31.             Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来
  32.             string sendStr = "ok!Client send message successful!";
  33.             byte[] bs = Encoding.ASCII.GetBytes(sendStr);
  34.             temp.Send(bs, bs.Length, 0);//返回信息给客户端
  35.             temp.Close();
  36.             s.Close();
  37.             Console.ReadLine();
  38.         }
  39.       
  40.     }
  41. }
复制代码


客户端:
第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第二步:建立一个Socket对像;
第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;
第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;
第五步:用socket对像的Receive()方法接受服务器发来的信息 ;
第六步:通信结束后一定记得关闭socket;

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. namespace Client
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             try
  13.             {
  14.                 int port = 2000;
  15.                 string host = "127.0.0.1";
  16.                ///创建终结点EndPoint
  17.                 IPAddress ip = IPAddress.Parse(host);
  18.                 //IPAddress ipp = new IPAddress("127.0.0.1");
  19.                 IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例

  20.               ///创建socket并连接到服务器
  21.                 Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
  22.                 Console.WriteLine("Conneting…");
  23.                 c.Connect(ipe);//连接到服务器

  24.               ///向服务器发送信息
  25.                 string sendStr = "hello!This is a socket test";
  26.                 byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节
  27.                 Console.WriteLine("Send Message");
  28.                 c.Send(bs, bs.Length, 0);//发送信息

  29.              ///接受从服务器返回的信息
  30.                 string recvStr = "";
  31.                 byte[] recvBytes = new byte[1024];
  32.                 int bytes;
  33.                 bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
  34.                 recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
  35.                 Console.WriteLine("client get message:{0}", recvStr);//显示服务器返回信息
  36.               ///一定记着用完socket后要关闭
  37.                 c.Close();
  38.             }
  39.             catch (ArgumentNullException e)
  40.             {
  41.                 Console.WriteLine("argumentNullException: {0}", e);
  42.             }
  43.             catch (SocketException e)
  44.             {
  45.                 Console.WriteLine("SocketException:{0}", e);
  46.             }
  47.             Console.WriteLine("Press Enter to Exit");
  48.         }
  49.     }
  50. }
复制代码






欢迎光临 四联光电智能照明论坛 (http://5xhome.com/) Powered by Discuz! X3.2