web服务器如何访问socket服务器的接口

web服务器如何访问socket服务器的接口,第1张

不需要有IP分配的知识,服务器需要有 *** 作系统 windows socket Windows Sockets 规范以UC Berkeley 大学BSD UNIX 中流行的Socket 接口为范例定义了一套microsoft Windows 下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket 风格的库函数;也包含了一组针对Windows 的扩展库函数,以使程序员能充分地利用Windows 消息驱动机制进行编程。 Windows Sockets 规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows 的基础上,Windows Sockets 也定义了一个二进制接口(ABI),以此来保证应用WindowsSockets API 的应用程序能够在任何网络软件供应商的符合Windows Sockets 协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。 遵守这套Windows Sockets 规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets 兼容实现的提供者,我们称之为Windows Sockets提供者。一个网络软件供应商必须百分之百地实现Windows Sockets 规范才能做到现Windows Sockets 兼容。 任何能够与Windows Sockets 兼容实现协同工作的应用程序就被认为是具有Windows Sockets 接口。我们称这种应用程序为Windows Sockets 应用程序。 Windows Sockets 规范定义并记录了如何使用API 与Internet 协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows Sockets 实现都支持流套接口和数据报套接口。 SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信。最早出现在UNIX系统中,是UNIX系统主要的信息传递方式。在WINDOWS系统中,SOCKET称为WINSOCK。 两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。 在客户方呼叫连接请求之前,它必须知道服务方在哪里。所以需要知道服务方所在机器的IP地址或机器名称,如果客户方和服务方事前有一个约定就好了,这个约定就是PORT(端口号)。也就是说,客户方可以通过服务方所在机器的IP地址或机器名称和端口号唯一的确定方式来呼叫服务方。在客户方呼叫之前,服务方必须处于侦听状态,侦听是否有客户要求建立连接。一旦接到连接请求,服务方可以根据情况建立或拒绝连接。连接方式有两种,同步方式(Blocking)和(noBlocking) 客户方发送的消息可以是文本,也可以是二进制信息流。当客户方的消息到达服务方端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息了。戴
支持你一下

可以做一个简单的比喻,就像在一个文件夹中不能有两个同名的文件,但是你却可以打开很多个同一个文件socket的原理是:服务器是在本机上新建一个服务端口,比如建一个3128的服务端口,这个时候它就会占住这个端口不让别人再的服务器再使用这个端口客户端是向某一个IP地址请求端口,不需要占服务的端口。即:一个电脑(更严格的说是网卡)上,不能新建2个有相同socket端口的服务器,但是可以有N个连相同端口的客户端

s
=
new
socket("127001",
8880)
前面那个ip是服务器的地址,只要这个ip写正确了,服务器放在哪里,客户端都能连上去的。
1270。01最简单的解释就是本机地址,你用这个ip,访问的就是你自己。
你可以去服务器上查看一下网络地址,然后把1270。01换成服务器的ip。

两个错误和一点建议。

● 错误1 是按照题主的在问题里所描述的设计,网关服务器根本没有维持长连接的必要,只需要转发消息给业务服务器后跟 Client 的连接就可以断开了,剩下的都是业务服务器跟 Client 直接通信了。不知题主还有什么关于维持长连接的必要没有在问题里说明?

● 错误2 是如果维持长连接了,把 Client 的端口号转发给业务服务器了有什么用?Client 的这个端口正在跟网关服务器通信呢,业务服务器怎么可能通过这个端口跟 Client 建立连接?难道同一个端口还能被多个 Socket 占用吗?

● 建议 要么改为业务服务器不跟 Client 通信,还是经由网关服务器中转进行;要么业务服务器就需要跟 Client 进行“打洞”(Hole Punching)。

先说为什么要“打洞”。对于处在同一子网下的计算机还好说,假如 Client 在子网 A 下,且 A 下有多态接入设备(最常见的就是走路由了),那么 A 子网下的所有计算对于你的服务器来说 IP 都是一样的,所以你要想要穿过路由直接跟 A 子网下的某台计算机建立连接,就必须要先“打洞”。

再推荐几篇有关 C# 打洞(Hole Punching)的资料:
>我对你问题的理解就是处于listen状态的socket最多能accept()多少个连接,使其处于established状态。
这个受本地环境( *** 作系统)的限制,我们知道一个socket会占用一个文件描述符,所以:
1、打开多少个socket会受到 *** 作系统对进程所打开文件描述符数量的限制。ulimit -n
2、 *** 作系统自身也会对打开文件的总数量有限制,这个和当前机器内存环境有关。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13415091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-31
下一篇 2023-07-31

发表评论

登录后才能评论

评论列表(0条)

保存