在ASP.NET中,使用Socket進行數據廣播需要創建一個ServerSocket實例,監聽指定的端口,并在接收到客戶端連接請求時,將數據發送給所有已連接的客戶端。以下是一個簡單的示例,展示了如何使用ASP.NET Socket進行數據廣播:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
public class SocketServer
{
private const int Port = 5000;
private static TcpListener _serverSocket;
public static void StartServer()
{
_serverSocket = new TcpListener(IPAddress.Any, Port);
_serverSocket.Start();
Console.WriteLine($"Server started on port {Port}");
Task.Run(() => AcceptClients());
}
private static async Task AcceptClients()
{
while (true)
{
var client = await _serverSocket.AcceptTcpClientAsync();
Console.WriteLine($"Client connected: {client.Client.RemoteEndPoint}");
// Handle client communication in a separate task
Task.Run(() => HandleClient(client));
}
}
private static async Task HandleClient(TcpClient client)
{
using (var stream = client.GetStream())
{
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Received message: {message}");
// Broadcast the message to all connected clients
BroadcastMessage(message, client);
}
}
}
private static void BroadcastMessage(string message, TcpClient senderClient)
{
foreach (var client in ConnectedClients)
{
if (client != senderClient)
{
try
{
using (var stream = client.GetStream())
{
byte[] broadcastMessage = Encoding.UTF8.GetBytes(message);
stream.Write(broadcastMessage, 0, broadcastMessage.Length);
}
}
catch (Exception ex)
{
Console.WriteLine($"Error broadcasting message: {ex.Message}");
}
}
}
}
}
protected void Application_Start(object sender, EventArgs e)
{
SocketServer.StartServer();
}
BroadcastMessage
方法:string message = "Hello, clients!";
SocketServer.BroadcastMessage(message, null);
這個示例中的BroadcastMessage
方法會將接收到的消息發送給所有已連接的客戶端。請注意,這個示例僅用于演示目的,實際應用中可能需要對客戶端進行身份驗證和管理。