zoukankan      html  css  js  c++  java
  • socket socket讲解

    socket  socket讲解

    一.socket是何物?

    参考百度百科:

    http://baike.baidu.com/link?url=4YNURsJLEaL0II79C68gPUoYKliXWJLM8V6H5QL0r_QOEmrxSQsnFPYxeuBx1U1bukTcAxhcl1glTOjxiGZBgSqb5G9_4N9Dj-XX-jXtXba

    二.socket常用类及函数讲解:(为如下demo做准备)

    IPAddress:

    IPAddress.Parse();

    IPEndPoint:

    Encoding:

    Encoding.Unicode.GetString()
    Encoding.Unicode.GetBytes()

    Socket:

    Send、Receive、Accept;

    Thread:

     Thread.Sleep();

    三.Demo:(仅供参考)

    1.Client  code:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Windows.Forms;
      9 using System.Net.Sockets;
     10 using System.Net;
     11 using System.Threading;
     12 
     13 namespace ClientSocket_Demo
     14 {
     15     public partial class Client : Form
     16     {
     17         public Client()
     18         {
     19             InitializeComponent();
     20             Control.CheckForIllegalCrossThreadCalls = false;
     21         }
     22 
     23         private Socket connSocket;
     24         private Thread ReceiveThread;
     25 
     26         private void btnConnection_Click(object sender, EventArgs e)
     27         {
     28             if (string.IsNullOrEmpty(txtIp.Text))
     29             {
     30                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "ip is null");
     31                 return;
     32             }
     33             if (string.IsNullOrEmpty(txtPort.Text))
     34             {
     35                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "port is null");
     36                 return;
     37             }
     38             Connection();
     39         }
     40 
     41         private void btnSend_Click(object sender, EventArgs e)
     42         {
     43             if (string.IsNullOrEmpty(txtMsg.Text))
     44             {
     45                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "msg is null");
     46                 return;
     47             }
     48             SendMsg();
     49         }
     50 
     51         /// <summary>
     52         /// connection
     53         /// </summary>
     54         private void Connection()
     55         {
     56             IPAddress ip = IPAddress.Parse(txtIp.Text);
     57             IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(txtPort.Text));
     58             connSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     59             try
     60             {
     61                 connSocket.Connect(endPoint);
     62                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "connection success.");
     63                 btnConnection.Enabled = false;
     64 
     65             }
     66             catch (Exception ex)
     67             {
     68                 connSocket.Close();
     69                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "connection fail.");
     70                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + ex.ToString());
     71             }
     72 
     73             ReceiveThread = new Thread(ReceiveCallBack);
     74             ReceiveThread.Start();
     75             ReceiveThread.IsBackground = true;
     76         }
     77 
     78         /// <summary>
     79         /// send msg
     80         /// </summary>
     81         private void SendMsg()
     82         {
     83             byte[] buffer = new byte[1024];
     84             string msg = txtMsg.Text;
     85             lstLog.Items.Add(DateTime.Now.ToString() + ":" + msg);
     86             buffer = Encoding.Unicode.GetBytes(msg);
     87 
     88             if (connSocket != null)
     89             {
     90                 connSocket.Send(buffer);
     91             }
     92             else 
     93             {
     94                 connSocket.Close();
     95                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "send fail.");
     96                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "no connection!");
     97             }
     98         }
     99 
    100         /// <summary>
    101         /// receive
    102         /// </summary>
    103         private void ReceiveCallBack()
    104         {
    105             byte[] buffer = new byte[1024];
    106             int count = 0;
    107 
    108             while (true)
    109             {
    110                 Thread.Sleep(1000);
    111                 try
    112                 {
    113                     count = connSocket.Receive(buffer);
    114                     if (count == 0)
    115                     {
    116                         connSocket.Close();
    117                         lstLog.Items.Add(DateTime.Now.ToString() + ":server disconnect.");
    118                         break;
    119                     }
    120                     string msg = Encoding.Unicode.GetString(buffer,0, count);
    121                     lstLog.Items.Add(DateTime.Now.ToString() + ":" + msg);
    122                 }
    123                 catch (Exception ex)
    124                 {
    125                     connSocket.Close();
    126                     lstLog.Items.Add(DateTime.Now.ToString() + ":server disconnect.");
    127                     lstLog.Items.Add(DateTime.Now.ToString() + ":" + ex.ToString());
    128                     break;
    129                 }
    130             }
    131         }
    132     }
    133 }
    View Code

    2.Server code:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Net;
      8 using System.Net.Sockets;
      9 using System.Text;
     10 using System.Threading;
     11 using System.Windows.Forms;
     12 
     13 namespace Socket_Demo
     14 {
     15     public partial class Server : Form
     16     {
     17         public Server()
     18         {
     19             InitializeComponent();
     20             Control.CheckForIllegalCrossThreadCalls = false;
     21         }
     22 
     23         private Socket connSocket;
     24         private Thread listenThread;
     25         private Thread ReceiveThread;
     26 
     27         private void button1_Click(object sender, EventArgs e)
     28         {
     29             if (string.IsNullOrEmpty(txtIp.Text))
     30             {
     31                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "ip is null");
     32                 return;
     33             }
     34             if (string.IsNullOrEmpty(txtPort.Text))
     35             {
     36                 lstLog.Items.Add(DateTime.Now.ToString() + ":" + "port is null");
     37                 return;
     38             }
     39             Start();
     40         }
     41 
     42         /// <summary>
     43         /// start
     44         /// </summary>
     45         private void Start()
     46         {
     47             byte[] buffer = new byte[1024];
     48             IPAddress ip = IPAddress.Parse(txtIp.Text);
     49             IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(txtPort.Text));
     50             connSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     51             connSocket.Bind(endPoint);
     52             connSocket.Listen(10);
     53             lstLog.Items.Add(DateTime.Now.ToString() + ":" + "listen:" + txtPort.Text);
     54             button1.Enabled = false;
     55 
     56             //监听线程
     57             listenThread = new Thread(ListenCallBack);
     58             listenThread.Start(connSocket);
     59             listenThread.IsBackground = true;
     60         }
     61 
     62         /// <summary>
     63         /// listen
     64         /// </summary>
     65         /// <param name="o"></param>
     66         private void ListenCallBack(object obj)
     67         {
     68             string ip = string.Empty;
     69 
     70             //创建监听套接字
     71             Socket listenSocket = obj as Socket;
     72 
     73             while (true)
     74             {
     75                 Thread.Sleep(1000);
     76 
     77                 try
     78                 {
     79                     //创建通信套接字
     80                     Socket socket = listenSocket.Accept();
     81                     ip = socket.RemoteEndPoint.ToString();
     82                     lstLog.Items.Add(DateTime.Now.ToString() + ":" + ip + " connect success.");
     83 
     84                     //通信线程
     85                     ReceiveThread = new Thread(ReceiveCallBack);
     86                     ReceiveThread.Start(socket);
     87                     ReceiveThread.IsBackground = true;
     88                 }
     89                 catch (Exception ex)
     90                 {
     91                     listenSocket.Close();
     92                     lstLog.Items.Add(DateTime.Now.ToString() + ":" + ex.ToString());
     93                     lstLog.Items.Add(DateTime.Now.ToString() + ":" + ip + " connect fail.");
     94                     break;
     95                 }
     96             }
     97         }
     98 
     99         /// <summary>
    100         /// receive
    101         /// </summary>
    102         /// <param name="o"></param>
    103         private void ReceiveCallBack(object o)
    104         {
    105             byte[] buffer = new byte[1024];
    106             int count = 0;
    107             string ip = string.Empty;
    108 
    109             Socket ReceiveSocket = o as Socket;
    110 
    111             while (true)
    112             {
    113                 Thread.Sleep(1000);
    114                 try
    115                 {
    116                     ip = ReceiveSocket.RemoteEndPoint.ToString();
    117                     count = ReceiveSocket.Receive(buffer);
    118                     if (count == 0)
    119                     {
    120                         ReceiveSocket.Close();
    121                         lstLog.Items.Add(DateTime.Now.ToString() + ":client disconnect.");
    122                         break;
    123                     }
    124                     string msg = Encoding.Unicode.GetString(buffer, 0, count);
    125                     lstLog.Items.Add(DateTime.Now.ToString() + ":" + msg);
    126                 }
    127                 catch (Exception ex)
    128                 {
    129                     ReceiveSocket.Close();
    130                     lstLog.Items.Add(DateTime.Now.ToString() + ":" + ip + "client disconnect.");
    131                     lstLog.Items.Add(DateTime.Now.ToString() + ":" + ex.ToString());
    132                     break;
    133                 }
    134             }
    135         }
    136 
    137         private void Server_Load(object sender, EventArgs e)
    138         {
    139             var localhostIp = Dns.GetHostEntry(Dns.GetHostName()).AddressList[5];
    140             txtIp.Text = localhostIp.ToString();
    141             txtPort.Text = "8000";
    142         }
    143     }
    144 }
    View Code

    四.注意事项:

  • 相关阅读:
    VS Code设置同步
    ASP.NET Core 发布
    CMD命令
    通过注册表为文件(夹)添加右键菜单
    win+r 以管理员身份运行
    .NET Core部署Windows服务
    .NET Core的打包到一个exe程序
    C#枚举
    C#生成Guid
    使用Visual Studio的单元测试
  • 原文地址:https://www.cnblogs.com/zlp520/p/5147995.html
Copyright © 2011-2022 走看看