TcpListenenner Class
TcpListener Class จะอยู่ภายใต้ namespace System.Net.Sockets ซึ่งคลาสในนี้จะใช้ในการอำนวยความสะดวก ในการสร้าง TCP Server Application
TcpListener มีคอนตรัคเตอร์ 3 แบบด้วยกันคือ
- TcpListener(int port) คอนตรัคเตอร์ตัวนี้จะทำการสร้างและกำหนดพอร์ตที่ใช้ในการติดต่อสื่อสารทาง TCP ของตัวโปรแกรมขึ้นมา
- TcpListener(IPEndPoint ie) คอนครัคเตอร์ตัวนี้จะทำการกำหนด IP address ที่จะรอรับข้อมูล ใช้เมื่อเครื่องมี การ์ดแลนมากกว่า 1 ตัว และและเราต้องการจะระบุว่าจะรอรับข้อมูลจากการ์ดแลนตัวใดตัวหนึ่งโดยไม่ระบุว่าพอร์ดใด
- TcpListener(IPAddress addr,int port) คอนครัตเตอร์ตัวนี้จะกำหนดทั้ง IP Address และ พอร์ตที่จะรอรับข้อมูล ใช้เมื่อเครื่องมีการ์ดแลนมากกว่า 1 ใบ โดยจะทำการเลือกการ์ดแลนใบใดใบหนึ่งและเลือกข้อมูลที่เข้ามาทางพอร์ตที่กำหนดเท่านั้น
Method ใน TcpListener Class
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
กระบวนการทำงานและการสร้าง TcpListener อ็อปเจ็คเพื่อรอรับข้อมูลมีดังนี้
TcpListenner server = new TcpListener(IPAddress.Parse("127.0.0.1"),6500);
Server.Start();
TcpClient newclient = server.AcceptTcpClient();
เริ่มจากเราสร้าง อ็อปเจ็คของ TcpListener ขึ้นมา จากนั้นเราก็เรียก method Start() เพื่อให้โปรแกรมรอรับข้อมูลจากไอพีและพอร์ตที่กำหนด เพียงเท่านี้โปรแกรมเราก็จะพร้อมที่จะรอรับการเชื่อมต่อเข้ามาใหม่แล้ว
จากนั้นสร้าง TcpClient อ็อปเจ็คขึ้นมา ทุกการสื่อสาร กับอุปกรณ์จะดำเนินการด้วย TcpClient อ็อปเจ็คcและเมื่อใช้งานเสร็จเราต้องทำการเรียก method Close() ให้กับ TcpClient และ method Stop() ให้ TcpListener อ็อปเจ็ค
หมายเหตุ ห้ามลืมเด็ดขาด ต้อง Close() ให้กับ TcpClient อ็อปเจ็ค ก่อนเรียก Stop() ให้ TcpListener
อ็อปเจ็ค เสมอ
*************************************
โปรแกรมตัวอย่าง
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace TcpListennerSample
{
class Program
{
static void Main()
{
int recv;
byte[] data = new byte[1024];
TcpListener newsock = new TcpListener(6500);
newsock.Start();
Console.WriteLine("Waiting for Client ....");
TcpClient client = newsock.AcceptTcpClient();
NetworkStream ns = client.GetStream();
string welcome = "Welcome to my test server";
data = Encoding.ASCII.GetBytes(welcome);
ns.Write(data,0,data.Length);
while (true)
{
data = new byte[1024];
recv = ns.Read(data,0,data.Length);
if (recv == 0)
break;
Console.WriteLine(Encoding.ASCII.GetString(data,0,recv));
ns.Write(data,0,recv);
}
ns.Close();
client.Close();
newsock.Stop();
}
}
}
**********************************************************
อธิบายโปรแกรม
ในการสร้างโปรแกรม TcpListennerSample เริ่มต้นจากการสร้าง TcpListenner object จะใช้ TCP พอร์ต 6500 จากนั้นก็เริ่ม Start() method ในส่วนถัดมาเป็นการสร้างอ็อปเจ็คใหม่เพื่อรอรับข้อมูล จากนั้นก็ใช้ AcceptTcpClient() method เพื่อรอรับการเข้ามาของ TCP Connection หรือการร้องขอต่างๆ
TcpListener newsock = new TcpListener(6500);
newsock.Start();
TcpClient client = newsock.AcceptTcpClient();
NetworkStream ns = client.GetStream();
ในการทำงานกับข้อมูลในสตรีมของข้อมูลในการสื่อสารทาง TCP เราต้องมีอ็อปเจ็ค ของ NetworkStream มาใช้ในการอ่านและเขียนเพราะอ็อปเจ็คของ NetworkStream นั้นมี method Read() และ Write() ใช้ในการอ่านและเขียนข้อมูลในสตรีมข้อมูลนั้นเอง
ข้อควรจำ method Read() และ Write() ของ NetworkStream นั้นรับข้อมูลเป็นอาร์เรย์ชนิด byte เท่านั้น
เราสามารถทดสอบโปรแกรมได้จากการรัน โปรแกรม TcpListennerSample และ TcpClientSample จากบทความตอนที่แล้วครับ
---------------------------------------------------
ไม่มีความคิดเห็น:
แสดงความคิดเห็น