zoukankan      html  css  js  c++  java
  • Socket通讯简易学习

    Socket打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求——接受请求,创建专用链接进行读写——处理完毕,关闭专用链接——关闭通信通道(当然其中监听到关闭专用链接可以重复循环)

    Ø  客户端:打开通信通道,连接服务器——数据交互——关闭信道。

    服务端server代码

     1  try
     2             {
     3                 bool types = true;
     4                 while (types != false)
     5                 {
     6 
     7                     int port = 2000;
     8 
     9                     string host = "127.0.0.1";
    10 
    11                     IPAddress ip = IPAddress.Parse(host);
    12 
    13                     IPEndPoint ipe = new IPEndPoint(ip, port);
    14 
    15                     Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类
    16 
    17                     s.Bind(ipe);//绑定2000端口
    18 
    19                     s.Listen(0);//开始监听
    20 
    21                     Console.WriteLine("等待与我配对");
    22 
    23                     Socket temp = s.Accept();//为新建连接创建新的Socket。
    24 
    25                     Console.WriteLine("正在配对..");
    26 
    27                     string recvStr = "";
    28 
    29                     byte[] recvBytes = new byte[1024];
    30 
    31                     int bytes;
    32 
    33                     bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
    34 
    35                    // recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
    36                     //recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
    37                     recvStr += Encoding.UTF8.GetString(recvBytes,0,bytes);
    38                     
    39                   // recvStr+= Encoding.Unicode.GetChars(recvBytes);
    40                     Console.WriteLine("配对人跟我讲:{0}", recvStr);//把客户端传来的信息显示出来
    41 
    42                     string sendStr = "我回配对人说可以配对Ok!Client Send Message Sucessful!";
    43 
    44                     byte[] bs = Encoding.UTF8.GetBytes(sendStr);
    45 
    46                     temp.Send(bs, bs.Length, 0);//返回客户端成功信息
    47 
    48                     temp.Close();
    49 
    50                     s.Close();
    51                 }
    52 
    53             }
    54 
    55             catch (ArgumentNullException e)
    56             {
    57 
    58                 Console.WriteLine("ArgumentNullException: {0}", e);
    59             }
    60 
    61             catch (SocketException e)
    62             {
    63 
    64                 Console.WriteLine("SocketException: {0}", e);
    65             }
    66 
    67             Console.WriteLine("Press Enter to Exit");
    68 
    69             Console.ReadLine();
    View Code

    客户端Client代码

     1 try
     2             {
     3 
     4                 int port = 2000;
     5 
     6                 string host = "127.0.0.1";
     7 
     8                 IPAddress ip = IPAddress.Parse(host);
     9 
    10                 IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
    11 
    12                 Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
    13 
    14                 Console.WriteLine("正在连接配对...");
    15 
    16                 c.Connect(ipe);//连接到服务器
    17 
    18                 string sendStr = "你好,我是hello!This is a socket test";
    19                 Encoding.Unicode.GetBytes(sendStr);
    20                // byte[] bs = Encoding.ASCII.GetBytes(sendStr);
    21                 byte[] bs = Encoding.UTF8.GetBytes(sendStr);
    22 
    23                 Console.WriteLine("Send Message");
    24 
    25                 c.Send(bs, bs.Length, 0);//发送测试信息
    26 
    27                 string recvStr = "";
    28 
    29                 byte[] recvBytes = new byte[1024];
    30 
    31                 int bytes;
    32 
    33                 bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
    34 
    35                 recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
    36 
    37                 Console.WriteLine("客户端接收到服务器说:{0}", recvStr);//显示服务器返回信息
    38 
    39                 c.Close();
    40 
    41                 Console.WriteLine("下面开始正常对话……");
    42                 bool trys = true;
    43                
    44                 while (trys != false)
    45                 {
    46                     bs = null;
    47                   string pika=  Console.ReadLine();
    48                    bs= Encoding.UTF8.GetBytes(pika);
    49 
    50                    c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
    51 
    52                    c.Connect(ipe);//连接到服务器
    53                    c.Send(bs, bs.Length, 0);//发送测试信息
    54                    string recvStr1 = "";
    55 
    56                    byte[] recvBytes1 = new byte[1024];
    57 
    58                    int bytes1;
    59 
    60                    bytes1 = c.Receive(recvBytes1, recvBytes1.Length, 0);//从服务器端接受返回信息
    61 
    62                    recvStr1 += Encoding.UTF8.GetString(recvBytes1, 0, bytes1);
    63 
    64                    Console.WriteLine("客户端接收到服务器说:{0}", recvStr1);//显示服务器返回信息
    65 
    66                    c.Close();
    67                 }
    68 
    69             }
    70 
    71             catch (ArgumentNullException e)
    72             {
    73 
    74                 Console.WriteLine("ArgumentNullException: {0}", e);
    75 
    76             }
    77 
    78             catch (SocketException e)
    79             {
    80 
    81                 Console.WriteLine("SocketException: {0}", e);
    82 
    83             }
    84 
    85             Console.WriteLine("Press Enter to Exit");
    86 
    87             Console.ReadLine();
    View Code

    其中有代码Encoding.UTF8

    这一块是设置编码,使用Unicode再用中文的时候会发生乱码????类试与这一的,编码服务端跟客户端必须一致,不然也会出现乱码行为,不过咱这一般都用Encoding.UTF8就OK的啦

  • 相关阅读:
    最短路径(Dijkstra算法)
    图的优先级搜索
    图的遍历(搜索)

    树(二叉树)
    TF-池化函数 tf.nn.max_pool 的介绍
    TF-卷积函数 tf.nn.conv2d 介绍
    TF-图像的深度和通道的概念(转)
    MongoDB-MongoDB重装系统后恢复
    MYSQL-重做系统恢复MYSQL过程
  • 原文地址:https://www.cnblogs.com/ms1976/p/10095116.html
Copyright © 2011-2022 走看看