從零開始學Socket:(一)服務端和客戶端建立
阿新 • • 發佈:2018-11-13
上篇我提到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));
}
}