我在C#中有一个项目,该项目使用HttpListener侦听到端口8080的请求,如果它是一个websocket请求,我将对其进行处理。这是一个代码段:
var server = new HttpListener();
server.Prefixes.Add("http://+:8080/");
server.Start();
log.Info(string.Format("TCPServer has started, Waiting for a connection..."));
while (true)
{
HttpListenerContext listenerContext = server.GetContext();
log.Info("A client connected.");
if (listenerContext.Request.IsWebSocketRequest)
{
WebSocket webSocket = null;
try
{
WebSocketContext webSocketContext = await listenerContext.AcceptWebSocketAsync(null);
webSocket = webSocketContext.WebSocket;
byte[] receiveBuffer = new byte[1024];
while (webSocket.State == WebSocketState.Open)
{
WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
Process();
}
}
catch (Exception e)
{
Console.WriteLine("Exception: {0}", e);
}
finally
{
if (webSocket != null)
webSocket.Dispose();
}
}
}
现在,我有一个使用标准WebSocket库的Angular客户端:
ws = new WebSocket("ws://X:8080/");
// Connection opened
ws.addEventListener('open', this.onOpen);
// Connection closed
ws.addEventListener('close', this.onClose);
// Listen for messages
ws.addEventListener('message', this.onMessage);
// Listen for possible errors
ws.addEventListener('error', this.onError);
当我同时运行客户端和服务器时,两者都运行良好。当我将服务器代码部署到远程服务器(同时尝试了远程计算机和AWS EC2实例)时,尝试通过客户端连接时出现以下错误:
与'ws:// X:8080 /'的WebSocket连接失败:WebSocket握手期间出错:'升级'标头丢失
在Chrome开发工具的“网络”标签中,我确实看到了该标头的存在,并且正如我说的,当服务器是本地服务器时它可以工作,但是在远程服务器中,该标头似乎由于某种原因而消失了。
有人可以帮我吗?在此先感谢
我建议您不要将域名用于Web套接字。用IP地址填写URI。