我正在学习套接字编程,服务器套接字accept()
让我感到困惑。我为服务器套接字accept()
写了两个场景,请看一下:
如果我的一个假设是正确的,那会回答下面的问题吗?或者,我的两种设想都是错误的。如果你能指导我找到正确的答案,或者至少是一些相关的文本来学习,我将非常感谢。
当您创建一个套接字并在该套接字上执行绑定,然后执行侦听时,您所拥有的就是所谓的侦听套接字
。当建立连接时,这个套接字基本上被克隆到一个新的套接字,这个套接字被称为服务套接字
它绑定到的端口仍然与原始端口相同。
但是这个套接字和以前的监听套接字有一个重要的区别。即它是套接字对
的一部分。唯一标识连接的是套接字对。因此,由于在图片中有2个套接字对,所以TCP通信通道的两端有2个IP Address和2个端口。在克隆服务套接字期间,TCP内核将分配一个tcb
,并在其中存储这2个ip@和2个端口。TCB还包含属于TCB的套接字编号。
每次TCP段进入时,都会检查TCP报头,检查它是否是SYN,对于SYN,您需要建立连接,这样您就已经通过了,但随后内核会检查它的监听套接字列表。如果它是一个普通的TCP数据包,而不是SYN,则两个端口号都在TCP报头中,IP@是IP报头的一部分,因此内核能够使用此信息找到属于此TCP连接的TCP。(对于SYN,该信息也存在,但正如我所说的,对于SYN,您只需要处理监听套接字)
这就是它的工作原理。
这些信息可以在UNIX网络编程:套接字网络API中找到。其中描述了到套接字的链接,而在其他参考资料中通常没有详细描述,而是强调了TCP的基本原理。
假设通过网络在两个套接字之间建立tcp连接。一个是服务器端,另一个是客户端。 谢谢
我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput
当我尝试使用套接字将物理设备连接到服务器时,我遇到了一个问题。在服务器端,它似乎不接受任何连接,而在客户端,套接字超时。你知道为什么会这样吗? 我在下面提供我的代码 服务器代码: 客户端: 11-16 23:32:11.016:W/系统。错误(24213):java.net。ConnectException:无法连接到/192.168.1.116(端口9090):连接失败:ETIMEDOUT(连接
首先我要感谢你花时间... 我在macbook中用C++创建了一个服务器套接字,在运行windows XP的不同机器中用Java创建了一个客户机/套接字。我已将端口指定为5000,但无法指定正确的主机,因此无法进行连接。当我在windows xp中使用WinSock2创建一个C++服务器/套接字时,当我使用本地主机时,连接是完美的...有什么想法吗??? 提前Thnx int main(int a
我正试图从套接字服务器(Java)向套接字客户端(Python)发送一个映像,但客户端中接收到的映像大小不正确,无法打开。我不知道我做错了什么。有什么建议吗?
真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。