Lập trình socket
Lập trình socket hay được hiểu là lập trình mạng. Lập trình mạng là cách để tạo ra sự giao tiếp giữa các máy tính với nhau.
Khái niệm cơ bản
- Server: Máy cung cấp dịch vụ.
- Client: Máy yêu cầu dịch vụ.
- IP: định danh máy tính trên mạng.
- Port: định danh 1 dịch vụ (phần mềm mạng) đang chạy trên 1 máy tính.
- Socket: đối tượng socket hỗ trợ kết nối, các giao thức và các thao tác gửi nhận dữ liệu qua mạng.
Code đầy đủ
using System; using System.Net.Sockets; using System.Text; namespace STDIOTraining { class Program { static void Main(string[] args) { TcpClient client = new TcpClient(); client.Connect("time.nist.gov", 13); NetworkStream netStream = client.GetStream(); byte[] bytes = new byte[client.ReceiveBufferSize]; netStream.Read(bytes, 0, client.ReceiveBufferSize); var message = Encoding.ASCII.GetString(bytes); message = DateTime.Parse("20" + message.Substring(7, 17)); Console.WriteLine(message); client.Close(); } } }
Giải thích
using System.Net.Sockets;
Khai báo using System.Net.Sockets
để sử dụng socket.
TcpClient client = new TcpClient(); client.Connect("time.nist.gov", 13);
Kết nối đến server giữ thời gian, trong bài viết này sử dụng TcpClient (trừu tượng hóa lớp socket) để kết nối đến server, thay vì trực tiếp sử dụng socket giúp code ngắn gọn và tăng tính ứng dụng thực tế hơn.
Dòng lệnh trên là kết nối đến port 13 của server time.nist.gov
. Port 13 của server này hỗ trợ gửi thời gian về cho client.
NetworkStream netStream = client.GetStream();
byte[] bytes = new byte[client.ReceiveBufferSize];
netStream.Read(bytes, 0, client.ReceiveBufferSize);
Với dòng lệnh trên, dữ liệu được gửi đến, tùy vào server mã hóa dữ liệu ra sao, ta tiến hành giải mã để nhận được dữ liệu với kiểu cần thiết.
var message = Encoding.ASCII.GetString(bytes);
Với dòng đầu tiên, dữ liệu cần xuất phát điểm ở vị trí thứ 7 và nó có độ dài 17 byte.
message = DateTime.Parse("20" + message.Substring(7, 17));
Đóng kết nối đã tạo để giải phóng tài nguyên
client.Close();