在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
方法会将接收到的消息发送给所有已连接的客户端。请注意,这个示例仅用于演示目的,实际应用中可能需要对客户端进行身份验证和管理。