1. 程式人生 > >從零開始學Socket:(一)服務端和客戶端建立

從零開始學Socket:(一)服務端和客戶端建立

上篇我提到Socket是TCP/IP的抽象介面。所以我們直接使用就好,沒必要知其甚解。

1.開啟VS 新建專案

名稱,位置隨意

這裡名稱是Server

框架選.NET 4.5(在這篇部落格裡也無所謂)

注意引用

using System.Net;
using System.Net.Sockets;

這兩個名稱空間

using System;
using System.Net;
using System.Net.Sockets;

namespace Server
{
    class Program
    {
       static void Main(string[] args)
        {
           
        } 
    }
}

2. 在Main函式外部宣告一個Server,並編寫一個StartServer函式,用於開啟伺服器

/// <summary>
/// 開啟一個伺服器
/// </summary>
static void StartServer()
{

}

在StartServer函式裡做初始化操作

//例項化一個Socket
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

裡面這些構造引數是什麼意思呢?

選中Socket按F12來一探究竟

接著回到StartServer,然後設定IP,由於我們做測試,這裡面的IP填的是我們電腦內網IP。放在伺服器上的話就填伺服器公網IP

//設定IP
IPAddress ipAdress = IPAddress.Parse("127.0.0.1");

 

然後設定埠,這裡選定為88,同樣的,放在伺服器上要設定為伺服器埠

然後設定網路終結點(包含IP和埠)

//設定網路終結點
IPEndPoint iPEndPoint = new IPEndPoint(ipAdress, 88);

 

然後繫結IP和埠號

//繫結ip和埠號
serverSocket.Bind(iPEndPoint);

 

最後設定監聽佇列長度,什麼意思呢?就是等待連線的客戶端數,如果設為0,就是不等待,來幾個連幾個。如果設為非零數。。。我也不知道會咋樣(旁白:???)至此StartServer函式編寫結束

//等待佇列(開始監聽埠號)
serverSocket.Listen(0);

服務端程式碼

using System;
using System.Net;
using System.Net.Sockets;

namespace Server
{
    class Program
    {
        static Socket serverSocket;
        static void Main(string[] args)
        {
            StartServer();
        }
        /// <summary>
        /// 開啟一個Socket
        /// </summary>
        static void StartServer()
        {
            //例項化一個Socket
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //設定IP
            IPAddress ipAdress = IPAddress.Parse("127.0.0.1");

            //設定網路終結點
            IPEndPoint iPEndPoint = new IPEndPoint(ipAdress, 88);

            //繫結ip和埠號
            serverSocket.Bind(iPEndPoint);

            //等待佇列(開始監聽埠號)
            serverSocket.Listen(0);
        }
    }
}

 

3.然後是客戶端,和服務端大同小異,注意IP這裡寫的是內網IP,也就是伺服器端所繫結的IP。如果放到伺服器上,還是要寫公網IP

可以瞭解一下Connect函式

using System;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace ClientTest
{
    class Program
    {
        //宣告客戶端
        static Socket clientSocket;
        static void Main(string[] args)
        {
            StartClient();
        }
        /// <summary>
        /// 開啟客戶端並連線到伺服器端
        /// </summary>
        static void StartClient()
        {
            clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 88));
        }
    }