nodejs怎样接受接受指定客户端连接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs怎样接受接受指定客户端连接相关的知识,希望对你有一定的参考价值。
本人用nodejs搭建一个服务器,但是我只想接收我指定的客户端进行连接,请问下各位大神有没有办法做到
参考技术A 获取客户端ip,其他的ip不允许访问function getClientIp (req)
var ipAddress;
var forwardIpStr = req.headers['x-forwarded-for'];
if (forwardIpStr)
var forwardIp = forwardIpStr.split(',');
ipAddress = forwardIp[0];
if (!ipAddress)
ipAddress = req.connection.remoteAdress;
if (!ipAddress)
ipAddress = req.socket.remoteAdress;
if (!ipAddress)
if (req.connection.socket)
ipAddress = req.connection.socket.remoteAdress;
else if (req.headers['remote_addr'])
ipAddress = req.headers['remote_addr'];
else if (req.headers['client_ip'])
ipAddress = req.headers['client_ip'];
else
ipAddress = req.ip;
return ipAddress;;
无法接受服务器上的套接字连接
【中文标题】无法接受服务器上的套接字连接【英文标题】:Can not accept socket connections on server 【发布时间】:2019-02-18 20:16:28 【问题描述】:我创建了一个.NET Console App
,我想在其中接受client
websockets。(我使用的是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
P.S我不确定是否在所有任务中传递相同的令牌,但除此之外我不知道为什么它会出现此错误。
【问题讨论】:
【参考方案1】:您的服务器代码根本没有实现HTTP 或WebSocket 协议。
WebSocket 会话以HTTP 会话开始,客户端发送HTTP 请求,请求服务器将连接升级到WebSocket protocol,然后服务器的HTTP 响应指示升级是否成功与否,然后才能交换任何 WebSocket 消息。
您的服务器只是打开一个普通的 TCP 端口,然后在客户端连接后立即发送任意字符串数据。您根本没有遵循HTTP 或WebSocket 协议。因此,当然,WebSocket 客户端会报告建立 WebSocket 会话失败。您的服务器没有发回有效的 HTTP 升级响应(正如客户端错误所说)。
不要直接使用Socket
类,而是尝试使用HttpListener
和HttpListenerWebSocketContext
类。例如:
How to work with System.Net.WebSockets without ASP.NET?
【讨论】:
以上是关于nodejs怎样接受接受指定客户端连接的主要内容,如果未能解决你的问题,请参考以下文章