我创建了一个.NET Console App
,我想在其中接受client
websocket。(我使用的是chrome扩展名-Simple Web Socket Client
)。
当我尝试向连接的客户端发送消息时,我在浏览器中收到此错误:
WebSocket connection to 'ws://localhost:8600/' failed:
Error during WebSocket handshake: net::ERR_INVALID_HTTP_RESPONSE
CLOSED: ws://localhost:8600
服务器
class Program
{
static async Task Main(string[] args)
{
CancellationTokenSource src = new CancellationTokenSource();
Console.WriteLine("starting server...");
Task server = Task.Run(async () =>
{
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8600);
serverSocket.Bind(point);
Console.WriteLine("Listening on localhost:8600" );
serverSocket.Listen(6);
var client = await serverSocket.AcceptAsync();
Task clientTask = Task.Run(async () =>
{
while (true)
{
await client.SendAsync(Encoding.UTF8.GetBytes("Date is" + DateTime.Now.ToString()), SocketFlags.None);
await Task.Delay(5000);
}
},src.Token);
}, src.Token);
while (true)
{
if (Console.ReadKey().Key == ConsoleKey.A)
{
src.Cancel();
break;
}
}
}
}
我尝试从Simple Web Socket Client(chrome扩展名)连接到:
ws://localhost:8600
PS 我不确定在所有任务中都传递相同的令牌,但是除此之外,我不知道为什么它会保持此错误。
答案 0 :(得分:2)
WebSocket会话以HTTP会话开始,客户端发送HTTP请求,要求服务器将连接升级到WebSocket protocol,并将服务器的{{3} }响应会指示在升级任何WebSocket消息之前,升级是否成功。
您的服务器只是打开一个普通的普通TCP端口,然后在客户端连接后立即发送任意字符串数据。您根本没有遵循HTTP或HTTP协议。因此,当然,WebSocket客户端将报告建立WebSocket会话失败。您的服务器没有发送回有效的HTTP升级响应(就像客户端错误所说的一样)。
请尝试使用WebSocket和Socket
类,而不是直接使用HttpListener
类。例如: