最后更新:2022-04-07 20:52:13 手机定位技术交流文章
两个网络程序通过双向通信连接交换数据,其端点被称为套接字。端点包括IP地址和港口号,这基本上是IP地址和港口组合协议。
常用的套接字
串流:串流用于提供连接的可靠数据传输服务,确保数据无误、复制和按顺序接收(基于TCP)。
数据订阅:数据订阅是一种不连接的服务,不能保证数据传输的可靠性、传输期间数据丢失或重复的风险、或数据(基于UDP)的连续接收。
简要介绍TCP和UDP。已经建立了TCP。为保持数据传输的一致性,每个连接需要三次握手。四个挥动断开器完成所有数据传输。TCP只能用于端对端通信,因为它是连接的。UDP是一个互不连接的通信协议。每次传输数据时无需建立连接 。因此,在广播方面,它并不限于终端对终端。
本部分主要教授服务器套接字和套接字课程,分别对应服务端和客户端套接字,并根据TCP协议包装。
ServerSocket()
此函数创建不受任何端口约束的服务器集 。
ServerSocket(int port)
此函数创建连接到指定端口的服务器软件包 。
ServerSocket(int port, int backlog)
积压记录是客户端连接请求的队列长度,服务器集与所提供的端口相关。
ServerSocket(int port, int backlog, InetAddress bindAddr)
创建一个将连接到特定端口的服务器、一个符合给定大小的请求队列和一个本地 IP 地址。
简单的说明一下,最初的建筑为任何港口生产了一个不受约束的包件。要手工捆绑它,我们必须使用捆绑方法。组建时受约束的港口在第二和第三座建筑方法中都有具体规定。制定了第三种建设办法,以界定将受约束的港口和当地知识产权地址。如果您不指定 IP 地址, 系统将指定可用的主机 IP 地址 。
特别是必须理解这一参数。
积压用来确定客户连接请求排队需要多长时间。操作系统管理客户连接请求。连接请求由该系统传送到先入先出排的排队中。操作系统通常将排队长度限制在50项。在排队人数达到50人的最大容量后,将拒绝其他请求。收到请求后,只有服务器呼叫服务器Socket.Accept () 。排队,为新的请求留出空间。如果连接请求被拒绝,这篇文章是全球之声在线特稿的一部分。
绑定( 套装地址端点) : 绑定到指定的 IP 地址和端口 。
(( 接受 ) : 倾听连接请求, 并将其发送到新的 Socket, 以便与客户端通信 。 此方法将连接请求暂停, 直至收到 。
设定 SoTimeout (时超时) : 设定连接超时, 如果设定了此选项, 被接受() 函数会弹出异常点, 如果在此期间没有出现连接请求 。
setReuseAddress(boolean on):
设置端口重用。当服务器套件关闭的时候,如果仍然有数据通过互联网传输到此服务器套件,此服务器套件不会立即释放本地端口 。而是等待一段时间,过滤系统能够提供关于该问题的更多资料,以确保收到网上提供的延迟数据。然后再释放端口。要验证一个进程关闭了服务器套件, 请使用以下代码 。即使操作系统没有放行港口,也不可能这样做。同一主机上的其他流程使港口能够立即再利用。您可以使用 ServerSocket.SetResuseAddress( true) 函数来这样做。需要铭记两点:1 - 方法必须在被定在特定港口之前被调用。否则无效。2. 与共享港口有关的其他程序也必须使用套件ReuseAddress功能。
setReceiveBufferSize (int size):
设定了接受方法返回的所有套接字对象的接收缓存大小 。单位为字节,操作系统决定默认大小 。一般说来,大型连续数据区块(HTTP或FTP数据传输)可用于更广泛的缓冲区。因此,传送次数将减少。这提高了数据传输的效率。以及互动通信,如Telent, 或即时数据访问,如游戏,建议使用一个小型缓冲区。确保及时发送少量数据。
setPerformancePreferences(int connectionTime,int latency,int bandwidth):
指定服务器套接字的性能选择。用于优先排序快速连接时间、低延时和高带宽。
Socket()
创建无连接的套件
Socket(Proxy proxy)
创建无连接的套件,该套接字使用特定的代理 。
Socket(SocketImpl impl)
使用自定义的 Socketimpl 创建未连接的套件 。
Socket(String host, int port)
创建一个流字符串并将其连接到所提供的主机端口号 。
Socket(InetAddress address, int port)
创建串行字符串并将其连接到所提供的端口号码和 IP 地址。
Socket(String host, int port, InetAddress localAddr, int localPort)
创建套接字并连接到给定的远程主机端口。 Sockets 也连接到所提供的本地地址和端口 。
构造方法还有其他,用法都类似,应该强调的是,要建造一个没有连接的插座,我们就必须用自己的手调用插座。连接()功能连接,如果您在构建时调用连接的结构, 您不需要调用连接() 函数 。经常是断开插座形成的结果。因为我们在连接之前 经常需要先做一些初步的准备
除少数例外情况外,使用几种API的方式与ServerSocket相同。
设置 SoTimeout( 时间超时): 设置阅读超时 。当此选项设定为不为零的时间时,从附件输入流中读取的呼叫将在此段时间内被屏蔽 。SocketTimeout 例外: 将提高读出超时 。
setKeepAlive(boolean on):
如果它注定是真实的,最底端的 TCP 实现将检查连接的真实性 。如果在两个小时内未在链接两端之间发送数据(注意:实际值因实现情况而异),TCP通过自动将千帕活性检测包发送到远程带,来做到这一点。如果您从远程插座收到回复,说明连接正常。如果远程 Socket 不回答,TCP将不断侦测。特定时间过后没有回复表明远程服务器可能已经失败 。TCP试图终止插座连接 。默认设置是假的, 这意味着 TCP 不检查连接的真实性, 因此不活动的客户端带将永远存在, 尽管服务器被停止 。可能的3种情况
1. 在另外两个小时无活动后,远程合成将发送另一台探测器,以响应预期的ACK.TCP。
2. 远程包件还原了RST, 通知当地TCP对口单位它已经倒塌并恢复运行,插座关闭。
3. 对等水平没有反应,插座关闭。
setOOBInline(boolean on):
默认情况下,此选项被禁用,包裹的TCP紧急数据将被小心销毁如果用户提出要求,它将无法接收紧急数据。则必须启用此选项。启用后,紧急数据与定期数据一起接收。SendurgentData 将紧急数据作为数据的一个字节发送 。它不是通过缓冲区发送的,而是直接经过缓冲区。必须注意到,在服务器端,应急数据与常规数据混杂在一起。服务器不知道数据是使用 SendUrgentData 方法发送的。流出流仍在使用。
setSendBufferSize(int size):
设置发送缓冲区大小(size>0),最好不要将发送缓冲区设得太小,太小会导致传输数据过于频繁,从而降低网络传输的效率。
setTcpNoDelay(boolean on):
Nagle算法是用这种方式打开和关闭的。Nagle 算法预计将在运行中, 可用 setTcpNoDelay ( true) 停止 。它有两个目的:a,Nagle算法要求与尚未查明的最多一个小组群的TCP连接;b,Nagle算法要求与尚未发现的最多一个小组群的TCP连接。在该分组确认之前,无法关闭临时文件夹:%s。换句话说,发件人跟踪了一个小组。只有在接收器响应 Jack 控制段时, 才能交付下一个组; 如果启用算法数据, 只有在写入缓存中累积了指定数量后, 才能交付 。才会被发送出去,由于数据传输量减少,网络利用率有所提高。如果关闭该算法,在上一个组的确认抵达后,仍有可能传送以下组,客户每次都发送数据。不论软件包大小,数据都是传送的。
setSoLinger(boolean on, int linger):
此配置仅影响软件包的关闭 。
当块 () 方法实施时, 默认情况下会立即返回, 如果不提供数据, 则底部系统接管输出流 。
如果缓冲区内仍然有数据不能直接传递给直接放弃,且如果将 RST 终端指令设置为 setSoLinger( true, 0), 则将发送到另一方, 则关闭切片将立即返回 。
如果使用 secSoLinger( true, n) 值,如果缓冲区内仍有数据尚未转移,关闭该缓冲区将需要你重复这一过程。最长阻塞n毫秒,如果缓冲区的数据在这一时限内通过封闭式方法传送,它将返回。如果超过200毫秒没有满足其余数据只是被丢弃。立即返回。
让我们从一个基本的例子开始 抓住索科特:
Socket及其服务供应商Socket已经成立。客户端连接到服务器并发送数据到服务器 。客户从服务处收到消息当客户收到客户的再见时,客户会与客户联系。然后客户和服务断开。这架飞机是客户和服务单位所在的地方
服务端:
客户端:
结果:
客户端打印:
服务端打印:
很明显,服务与客户之间的沟通是通过合成实现的。
学习记录,以及如果出现错误的正面评论。
本文由 在线网速测试 整理编辑,转载请注明出处。