2014年7月20日 星期日

同步化TcpListener實作,利用網路傳送資料

伺服器端:
using System.Net;
using System.Net.Sockets;

//監聽所有可以達到本機的IP位置;9000port
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 9000);
TcpListener listener = new TcpListener(ipEndPoint);
listener.Start();

//無窮迴圈等待客戶端
while (true)
{
    TcpClient tcpClient = listener.AcceptTcpClient();

    //連上了就開始處理
    if (tcpClient.Connected)
    {
        //資料流指向tcpClient(客戶端)傳來的資料
        NetworkStream networkStream = tcpClient.GetStream();

        //傳進來是位元組
        byte[] receiveByte = new byte[tcpClient.ReceiveBufferSize];

        // ReceiveBufferSize好像是固定數值,真正讀到的長度Read()會回傳
        int resdByteLength = 
            networkStream.Read(receiveByte, 0, tcpClient.ReceiveBufferSize);

        //編碼成看得懂的字串
        string receiveString = 
            Encoding.Default.GetString(receiveByte, 0, resdByteLength);

        //在Connected區塊裡都是連接狀態,可以再發訊息給客戶端,
        //也是利用網路資料流的方式,離開後又回到無窮迴圈等下一次客戶端連線
    }
}
發送端:
using System.Net;
using System.Net.Sockets;

//伺服器端位置
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 9000);
TcpClient tcpClient = new TcpClient();

//連接伺服器
tcpClient.Connect(ipEndPoint);

if(tcpClient.Connected)
{
    //編碼成byte讓網路流傳遞
    string sendString = "這是要發送的訊息";
    byte[] sendByte = Encoding.Default.GetBytes(sendString);
    NetworkStream networkStream = tcpClient.GetStream();
    networkStream.Write(sendByte, 0, sendByte.Length);
}

沒有留言:

張貼留言