Search…

Socket Server trong C#

08/07/20202 min read
Lập trình mạng (socket server) trong C# thông qua code mẫu với các hạ tầng Ethernet, Wifi...

Socket server

Sau bài viết Socket Client trong C# đã nêu ra 1 số kiến thức về lập trình mạng, bài viết này hướng dẫn cách tạo ra 1 server.

Mô hình cơ bản

  • IP: hay 127.0.0.1
  • Port: 13 - có thể tùy chỉnh, trong trường hợp trên máy server đã mở 1 port cùng giá trị.

Code đầy đủ

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace STDIOTraining
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 13);

            listener.Bind(ip);
            listener.Listen(0);

            Socket socket = listener.Accept();

            socket.Send(Encoding.ASCII.GetBytes("Hello!!!"));

            socket.Shutdown(SocketShutdown.Both);
        }
    }
}

Giải thích

using System.Net;
using System.Net.Sockets;

Khai báo hai using System.Net;using System.Net.Sockets;  chứa các đối tượng, phương thức cần thiết để lập trình với socket.

Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Chọn giao thức TCP và 1 số cài đặt cơ bản.

IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 13);
listener.Bind(ip);
listener.Listen(0);

Để client kết nối đến thì client cần phải biết IP và server đang mở Port nào? Trong trường hợp này, server đang mở Port 13, IP sẽ là IP của server trong mạng, nếu server và client đang chung 1 máy thì có thể sử dụng localhost (127.0.0.1).

Socket socket = listener.Accept();

Phương thức Accept() sẽ tạm "pause" chương trình để chờ đợi 1 kết nối từ client (thông thường, kết hợp với Threading để chương trình không bị "khóa" tại điểm này).

socket.Send(Encoding.ASCII.GetBytes("Hello!!!"));

Sau khi đã có một kết nối từ client, server sẽ chấp nhận và gửi thông điệp Hello!!!

socket.Shutdown(SocketShutdown.Both);

Đóng kết nối.

Mở rộng

Kết hợp giữa 2 bài viết:

Để có được 1 ví dụ hoàn chỉnh về Socket Client kết nối đến Socket Server.

  • Tiến hành chạy server trước (chương trình sẽ tạm dừng ở listener.Accept()).
  • Tiến hành chạy client.
    • Khi client kết nối đến server.
    • Server chấp nhận kết nối.
    • Gửi thông điệp về client.
    • Client nhận và hiển thị dữ liệu nhận được.
    • Server và client đóng kết nối.

Xem lại client codes

using System;
using System.Net.Sockets;
using System.Text;

namespace STDIOTraining
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpClient client = new TcpClient();
            client.Connect("127.0.0.1", 13);

            NetworkStream netStream = client.GetStream();
            byte[] bytes = new byte[client.ReceiveBufferSize];
            netStream.Read(bytes, 0, client.ReceiveBufferSize);
            
            var message = Encoding.ASCII.GetString(bytes);
            
            Console.WriteLine(message);
            
            client.Close();
        }
    }
}
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024