Lập trình C# Socket TCP client/server trên Visual Stdio

Một phần của tài liệu Xây dựng hệ thống quản lý phương tiện giao thông bằng công nghệ GPS và thiết kế thiết bị thu thập dữ liệu GPS cho các phương tiện (Trang 70 - 75)

CHƯƠNG 3: XÂY DỰNG SERVER GPRS

3.2.1.Lập trình C# Socket TCP client/server trên Visual Stdio

Socket là một giao diện lập trình ứng dụng (API) mạng. Thông qua giao

diện này chúng ta có thể lập trình điều khiển việc truyền thông giữa hai máy sử dụng các giao thức mức thấp là TCP, UDP…

Socket là sự trừu tượng hoá ở mức cao, có thể tưởng tượng nó như là thiết bị truyền thông hai chiều gửi – nhận dữ liệu giữa hai máy tính với nhau.

Các loại Socket:

-Socket hướng kết nối (TCP Socket).

-Socket không hướng kết nối (UDP Socket). -Raw Socket.

Hình 3.2. Các socket *Đặc điểm của Socket hướng kết nối:

-Có 1 đường kết nối ảo giữa 2 tiến trình.

-Một trong 2 tiến trình phải ñợi tiến trình kia yêu cầu kết nối. -Có thể sử dụng để liên lạc theo mô hình Client/Server.

-Trong mô hình Client/Server thì Server lắng nghe và chấp nhận một yêu cầu kết nối.

-Các gói tin chuyển đi tuần tự. *Đặc điểm của Socket không hướng kết nối:

-Hai tiến trình liên lạc với nhau không kết nối trực tiếp. -Thông điệp gửi đi phải kèm theo địa chỉ của người nhận. -Thông điệp có thể gửi nhiều lần.

-Người gửi không chắc chắn thông điệp tới tay người nhận. -Thông điệp gửi sau có thể đến đích trước thông điệp gửi trước đó.

*Số hiệu cổng của Socket:

-Để có thể thực hiện các cuộc giao tiếp, một trong hai quá trình phải công bố số hiệu cổng của socket mà mình sử dụng.

-Mỗi cổng giao tiếp thể hiện một địa chỉ xác ñịnh trong hệ thống. Khi quá trình được gán một số hiệu cổng, nó có thể nhận dữ liệu gởi đến cổng này từ các quá trình khác.

-Quá trình còn lại cũng yêu cầu tạo ra một socket.

*NameSpace và Class:

Namespace System.Net và System.Net.Sockets cung cấp giao diện lập trình rất đơn giản cho các giao thức mạng.

Có rất nhiều lớp để ta lập trình. Trong bài đồ án này chúng ta quan tâm lớp IPAdress, IPEndPoint, DNS, …

Một số Field cần chú ý:

Any: Cung cấp một địa chỉ IP ñể chỉ ra rằng Server phải lắng nghe trên tất cả các Card mạng.

Broadcast: Cung cấp một địa chỉ IP quảng bá. Loopback: Trả về một địa chỉ IP lặp.

AdressFamily: Trả về họ địa chỉ của IP hiện hành.

- Lớp IPAddress:

Một số phương thức cần chú ý: Phương thức khởi tạo.

IPAddress ( B y te [ ])

IPAddress ( Int64)

IsLoopback: Cho biết địa chỉ có phải địa chỉ lặp không. Parse: Chuyển IP dạng xâu về IP chuẩn.

ToString: Trả ñịa chỉ IP về dạng xâu.

TryParse: Kiểm tra IP ở dạng xâu có hợp lệ không? - Lớp IPEndPoint: (adsbygoogle = window.adsbygoogle || []).push({});

Một số phương thức cần chú ý: Phương thức khởi tạo.

IPEndPoint (Int64, Int32). IPEndPoint (IPAddress, Int32).

Create: Tạo một EndPoint từ một địa chỉ Socket.

ToString : Trả về địa chỉ IP và số hiệu cổng theo khuôn dạng. Địa

chỉ cổng, ví dụ: 192.168.1.1:8080 - Lớp DNS:

Một số thành phần của lớp:

HostName: Cho biết tên của máy ñược phân giải. GetHostAddress: Trả về tất cả IP của một trạm.

GetHostEntry: Giải ñáp tên hoặc địa chỉ truyền vào và trả về đối tượng.

IPHostEntry

GetHostName: Lấy về tên của máy tính cục bộ. NameSpace System.Net.Sockets

Một số lớp hay dùng: TcpClient, UdpClient, TcpListener, Socket, NetworkStream, …

*Kết nối Server-Client với TCP/IP:

Khi được chạy, server cần được xác định rõ địa chỉ IP và sẽ “lắng nghe” trên một port cụ thể. Server sẽ nằm trong trạng thái này cho đến khi client gửi đến một yêu cầu kết nối. Sau khi được server chấp nhận, một connection sẽ hình thành cho phép server và client giao tiếp với nhau.

Server:

1. Tạo một đối tượng System.Net.Sockets.TcpListener để bắt đầu “lắng nghe” trên một cổng cục bộ.

2. Đợi và chấp nhận kết nối từ client với phương thức AccepSocket(). Phương thức này trả về một đối tượng System.Net.Sockets.Socket dùng để gửi và nhận dữ liệu.

3. Thực hiện giao tiếp với client. 4. Đóng Socket.

Thông thường quy trình này sẽ được đặt trong một vòng lặp (lặp lại bước 2) để chấp nhận nhiều kết nối cùng lúc (sử dụng Thread) hoặc các kết nối lần lượt.

Client:

1. Tạo một đối tượng System.Net.Sockets.TcpClient

2. Kết nối đến server với địa chỉ và port xác định với phương thức TcpClient.Connect()

3. Lấy luồng (stream) giao tiếp bằng phương thức TcpClient.GetStream(). 4. Thực hiện giao tiếp với server.

5. Đóng luồng và socket.

Quy trình này có thể được minh họa theo mô hình sau:

Hình 3.3. Quy trình kết nối Server/Client

Một phần của tài liệu Xây dựng hệ thống quản lý phương tiện giao thông bằng công nghệ GPS và thiết kế thiết bị thu thập dữ liệu GPS cho các phương tiện (Trang 70 - 75)