[Windows 8]使用Socket連接-----建立服務器

[Windows 8]使用Socket連接-----建立服務器

 

首先,新增一個【主控台應用程式】,命名為【ServiceConsole】

375.jgp

 

由於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

用來與客戶端進行通訊

 

專案執行的畫面如下:

376