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);
};