Console.WriteLine(“Hello, World!”);
const int PORT = 5000;
TcpListener server = new TcpListener(IPAddress.Any, PORT);
server.Start();
Console.WriteLine($”Server đang chạy tại port {PORT}…”);
Console.WriteLine(“Đang chờ client kết nối…”);
while (true) {
// 3. Chờ client kết nối
TcpClient client = await server.AcceptTcpClientAsync();
Console.WriteLine(“Client đã kết nối!”);
// 4. Xử lý client
_ = HandleClient(client);

async Task HandleClient(TcpClient client) {
using (client) {
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
while (true) {
// 5. Nhận dữ liệu từ client
int bytesRead = await stream.ReadAsync(buffer);
// Client đã disconnect
if (bytesRead == 0) { break; }
// 6. Chuyển bytes thành string
string message = Encoding.UTF8.GetString( buffer, 0, bytesRead );
Console.WriteLine($"Client: {message}");
// 7. Tạo response
string response = $"Server nhận được: {message}";
// 8. Chuyển string thành bytes
byte[] responseBytes = Encoding.UTF8.GetBytes(response);
// 9. Gửi response về client
await stream.WriteAsync(responseBytes);
}
Console.WriteLine("Client đã ngắt kết nối.");
}
}

2. TCP Client — Program.cs

Tạo project client riêng và dùng code:

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

const string HOST = "127.0.0.1";
const int PORT = 5000;

// 1. Tạo TCP Client
using TcpClient client = new TcpClient();

// 2. Kết nối tới Server
await client.ConnectAsync(HOST, PORT);

Console.WriteLine("Đã kết nối tới server!");

NetworkStream stream = client.GetStream();

byte[] buffer = new byte[1024];

while (true)
{
    // 3. Nhập message
    Console.Write("Bạn: ");
    string? message = Console.ReadLine();

    if (string.IsNullOrEmpty(message))
    {
        continue;
    }

    // 4. Nếu nhập exit thì thoát
    if (message.Equals("exit", StringComparison.OrdinalIgnoreCase))
    {
        break;
    }

    // 5. String → Bytes
    byte[] data = Encoding.UTF8.GetBytes(message);

    // 6. Gửi dữ liệu tới Server
    await stream.WriteAsync(data);

    // 7. Chờ Server trả lời
    int bytesRead = await stream.ReadAsync(buffer);

    if (bytesRead == 0)
    {
        Console.WriteLine("Server đã ngắt kết nối.");
        break;
    }

    // 8. Bytes → String
    string response = Encoding.UTF8.GetString(
        buffer,
        0,
        bytesRead
    );

    Console.WriteLine($"Server: {response}");
}

Console.WriteLine("Client đóng kết nối.");

Ví dụ server tối giản:

using System.Net.WebSockets;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.UseWebSockets();

app.Map("/chat", async context =>
{
    if (!context.WebSockets.IsWebSocketRequest)
    {
        context.Response.StatusCode = 400;
        return;
    }

    using WebSocket socket =
        await context.WebSockets.AcceptWebSocketAsync();

    byte[] buffer = new byte[1024];

    while (socket.State == WebSocketState.Open)
    {
        WebSocketReceiveResult result =
            await socket.ReceiveAsync(
                new ArraySegment<byte>(buffer),
                CancellationToken.None
            );

        if (result.MessageType == WebSocketMessageType.Close)
        {
            await socket.CloseAsync(
                WebSocketCloseStatus.NormalClosure,
                "Bye",
                CancellationToken.None
            );

            break;
        }

        string message =
            Encoding.UTF8.GetString(
                buffer,
                0,
                result.Count
            );

        Console.WriteLine($"Client: {message}");

        byte[] response =
            Encoding.UTF8.GetBytes(
                $"Server nhận: {message}"
            );

        await socket.SendAsync(
            new ArraySegment<byte>(response),
            WebSocketMessageType.Text,
            true,
            CancellationToken.None
        );
    }
});

app.Run("http://localhost:5000");

Sau đó JavaScript:

const socket = new WebSocket("ws://localhost:5000/chat");

socket.onopen = () => {
    console.log("Connected");

    socket.send("Hello C# Server");
};

socket.onmessage = (event) => {
    console.log("Server:", event.data);
};

socket.onclose = () => {
    console.log("Disconnected");
};

socket.onerror = (error) => {
    console.error("WebSocket error:", error);
};