[Windows 8]使用Socket連接-----建立服務器
首先,新增一個【主控台應用程式】,命名為【ServiceConsole】
由於Socket通訊需要使用到System.Net.Sockets 命名空間,因此先在 Program.cs 中引用
using System.Net.Sockets;
引用後,接下來建立的服務器端能接收客戶端的連接請求,程式碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
namespace ServiceConsole
{
class Program
{
static void Main(string[] args)
{
int receiveLength;
IPEndPoint ipendPoint = new IPEndPoint(IPAddress.Any, 9900);
Socket newScoket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
newScoket.Bind(ipendPoint);
newScoket.Listen(10);
Console.WriteLine("等待客戶端連接");
Socket client = newScoket.Accept();
IPEndPoint clientIp = (IPEndPoint)client.RemoteEndPoint;
Console.WriteLine("連接客戶端地址:" + clientIp.Address + ",埠號碼:" + clientIp.Port);
while (true)
{
byte[] data = new byte[1024];
receiveLength = client.Receive(data);
Console.WriteLine("取得字串的長度" + receiveLength);
if (receiveLength == 0)
break;
String getdata = Encoding.UTF8.GetString(data, 0, receiveLength);
Console.WriteLine("從客戶端取得的數據:" + getdata);
byte[] send = new byte[1024];
send = Encoding.UTF8.GetBytes("response:" + getdata);
client.Send(send,send.Length,SocketFlags.None);
}
Console.WriteLine("Disconnected from" + clientIp.Address);
client.Close();
newScoket.Close();
}
}
}
上面的程式碼中,首先 IPEndPoint類型的對象 ipEndPoint 指定服務器端的IP位址與埠號碼
然後換Socket 類型的對象newSocket,使用newSocket 對象的Bind方法綁定 ipEndPoint對象
並呼叫Listen方法使 newSocket 對象處於偵聽狀態,來等待客戶端連接
一但有客戶端請求與服務器連接,就會使用 newSocket 對象的 Accept 方法建立一個新 Socket 類型的對象 client
用來與客戶端進行通訊
專案執行的畫面如下: