四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3639|回复: 0
打印 上一主题 下一主题

C#版 Socket编程(最简单的Socket通信功能

[复制链接]
  • TA的每日心情
    开心
    2018-7-4 09:08
  • 97

    主题

    392

    帖子

    6095

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    6095
    跳转到指定楼层
    楼主
    发表于 2016-11-8 20:50:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息;
    这里只是一个简单的示例,是一个最基本的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. }
    复制代码

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-5-2 20:44 , Processed in 1.062500 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表