用C#写一个websocket服务器
时间: 2024-03-10 21:34:21 浏览: 19
语言编写程序的好处是什么?
使用C语言编写程序的好处有很多。首先,C语言是一种高效的编程语言,可以生成快速、高效的代码。其次,C语言具有广泛的应用领域,包括操作系统、嵌入式系统、网络编程等方面。此外,C语言的语法简洁清晰,易于学习和理解。最后,C语言的开发工具和库非常丰富,可提高开发效率和程序质量。
相关问题
用c#写一段websocket
以下是一个简单的C# WebSocket程序,用于建立WebSocket连接并发送和接收消息:
```csharp
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WebSocketProgram
{
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("WebSocket Program\n");
// WebSocket endpoint
Console.Write("Enter WebSocket endpoint: ");
Uri uri = new Uri(Console.ReadLine());
// Create client WebSocket
ClientWebSocket clientWebSocket = new ClientWebSocket();
await clientWebSocket.ConnectAsync(uri, CancellationToken.None);
// Send message
Console.Write("\nEnter message to send: ");
string message = Console.ReadLine();
byte[] messageBytes = Encoding.UTF8.GetBytes(message);
await clientWebSocket.SendAsync(new ArraySegment<byte>(messageBytes), WebSocketMessageType.Text, true, CancellationToken.None);
// Receive message
byte[] buffer = new byte[1024];
WebSocketReceiveResult result = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine("\nReceived message: " + receivedMessage);
// Close WebSocket
await clientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing connection", CancellationToken.None);
Console.WriteLine("\nPress any key to exit.");
Console.ReadKey();
}
}
}
```
该程序要求输入WebSocket端点,然后创建客户端WebSocket并连接到端点。它还要求输入要发送的消息,并将其作为UTF8编码的字节数组发送到服务器。然后,它接收来自服务器的消息,并将其作为UTF8编码的字符串打印出来。最后,该程序关闭WebSocket连接。注意:该程序只是一个简单的示例,实际的WebSocket程序需要更多的功能和异常处理。
c# 创建一个WebSocketServer 项目
可以按照以下步骤创建一个 C# WebSocketServer 项目:
1. 创建一个新的 C# 控制台应用程序项目。
2. 添加 `System.Net.WebSockets` 命名空间。
3. 在 `Program.cs` 文件中添加以下代码:
```csharp
using System;
using System.Net;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
namespace WebSocketServer
{
class Program
{
static async Task Main(string[] args)
{
var listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8080/");
listener.Start();
Console.WriteLine("Listening...");
while (true)
{
var context = await listener.GetContextAsync();
if (context.Request.IsWebSocketRequest)
{
ProcessWebSocketRequest(context);
}
else
{
context.Response.StatusCode = 400;
context.Response.Close();
}
}
}
static async void ProcessWebSocketRequest(HttpListenerContext context)
{
try
{
var webSocket = await context.AcceptWebSocketAsync(subProtocol: null);
Console.WriteLine("WebSocket connected");
var buffer = new byte[1024 * 4];
WebSocketReceiveResult result = null;
while (webSocket.State == WebSocketState.Open)
{
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Text)
{
var message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine($"Received message: {message}");
var responseBytes = System.Text.Encoding.UTF8.GetBytes($"Echo: {message}");
await webSocket.SendAsync(new ArraySegment<byte>(responseBytes), WebSocketMessageType.Text, true, CancellationToken.None);
}
else if (result.MessageType == WebSocketMessageType.Close)
{
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
Console.WriteLine("WebSocket closed");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"WebSocket error: {ex.Message}");
}
}
}
}
```
4. 运行程序,WebSocket 服务器将在 `http://localhost:8080/` 上监听连接请求。当客户端连接时,服务器将打印一条消息并开始接收客户端发送的消息。当接收到消息时,服务器将打印消息内容并将其回显给客户端。客户端可以通过发送 `Close` 消息来关闭 WebSocket 连接。