【问题标题】:What exactly is SocketSocket到底是什么
【发布时间】:2013-04-20 10:28:12
【问题描述】:

我不知道套接字是什么意思。 服务器在特定计算机上运行,​​并具有绑定到特定端口号的套接字。服务器只是等待,侦听套接字以供客户端发出连接请求。 当服务器接受连接时,它会获得一个绑定到同一本地端口的新套接字,并将其远程端点设置为客户端的地址和端口。 它需要一个新的套接字,以便它可以继续侦听原始套接字的连接请求,同时满足已连接客户端的需求。

那么,socket 是在内存中创建的某个类吗?对于每个客户端连接,都会在内存中创建此类的新实例? socket里面写的是本地端口和连接的客户端的端口和IP号。有人能详细解释一下socket的定义吗?

谢谢

【问题讨论】:

标签: sockets


【解决方案1】:

套接字实际上是一种文件句柄,其后面可以是网络会话。

您可以(大多数情况下)像任何其他文件句柄一样读取和写入它,并让数据在会话的另一端进出。

您描述的具体操作是针对套接字的服务器端的。服务器建立(绑定到)一个可用于接受传入连接的套接字。接受后,您会为已建立的会话获得 另一个 套接字,以便服务器可以返回并在原始套接字上侦听更多传入连接。

它们在内存中的表示方式取决于您的抽象级别。

在 C 的最低级别,它们只是文件描述符,一个小整数。但是,您可能有一个更高级别的Socket ,它封装了低级别套接字的行为。

【讨论】:

  • 更准确的说法是“其背后是网络会话的端点”。
  • @paxdiablo 以上评论?
  • @Suraj,如果您要问正确的术语是什么,我的想法是,您是否指定 immediate 在套接字(例如端点)或更集体的术语(例如,会话、“另一端”、网络),它与套接字 是什么 并没有太大关系——它基本上是一个句柄,用于指示与其他地方的某种连接。
  • @paxdiablo 你能帮我找到一些好的资源,在那里我可以深入了解所有这些术语以及它们的工作原理吗?
  • @Suraj,我主要是在很久以前在 Uni 学习的,但我目前的参考资料是 W Richard Stevens 的书“UNIX 网络编程”。在我看来这很好。
【解决方案2】:

根据 Michael J. Doonahoo 和 Kenneth L. Calvert 的“程序员 C 实用指南中的 TCP/IP 套接字”(Chaptr 1, Section 1.4, Pg 7):

套接字是一种抽象,应用程序可以通过它发送 并接收数据,就像打开文件允许应用程序读取和写入数据到稳定存储一样。 套接字允许应用程序“插入”网络并进行通信 与也插入同一网络的其他应用程序。 一台机器上的应用程序写入套接字的信息可以是 由不同机器上的应用程序读取,反之亦然。

请参阅本书以从程序员的角度清楚地了解套接字。

【讨论】:

    【解决方案3】:

    网络套接字是在网络上运行的两个程序之间的通信流中的一个端点。

    套接字是IP地址加端口号的组合

    这是在 Internet 的无连接上下文中来自服务器应用程序的典型套接字请求序列,其中服务器处理许多客户端请求并且不维持连接的时间长于提供即时请求的时间:

    实施步骤

    在服务器端

    initilize socket() 
    --
    bind() 
    -- 
    recvfrom() 
    --
    (wait for a sendto request from some client) 
    -- 
    (process the sendto request) 
    --
    sendto (in reply to the request from the client...for example, send an HTML file)
    

    相应的客户端套接字请求序列将是:

    socket() 
    --
    bind() 
    --
    sendto() 
    --
    recvfrom()
    

    这样您就可以进行管道连接.. 更多http://www.steves-internet-guide.com/tcpip-ports-sockets

    【讨论】:

    • 一个本地端口可以关联多个套接字
    【解决方案4】:

    套接字定义 在两个计算机系统上运行的两个进程之间的通信可以完全由关联指定:{protocol, local-address, local-process, remote-address, remote-process} 我们还将半关联定义为 {protocol, local- address, local-process} 或 {protocol, remote-address, remote-process},指定连接的一半。这种半关联也称为套接字,或传输地址。套接字一词已被伯克利 Unix 网络系统普及,它是“通信的端点”,对应于半关联的定义。

    【讨论】:

      【解决方案5】:

      我在网上找到了这篇文章。

      所以把它们重新组合起来,一个套接字是一个 IP 的组合 地址和端口,它充当接收或接收的端点 通过 Internet 发送信息,这些信息由 TCP 组织。 这些构建块(与各种其他协议和 技术)在后台工作以进行每次谷歌搜索, facebook 帖子,或介绍性技术博客帖子。

      https://medium.com/swlh/understanding-socket-connections-in-computer-networking-bac304812b5c

      【讨论】:

        猜你喜欢
        • 2016-05-15
        • 1970-01-01
        • 2013-02-06
        • 2013-05-05
        • 2010-11-19
        • 2012-06-16
        • 2011-04-02
        • 2016-04-13
        • 2012-03-07
        相关资源
        最近更新 更多