代码之家  ›  专栏  ›  技术社区  ›  Roman

我可以关闭并重新打开插座吗?

  •  6
  • Roman  · 技术社区  · 15 年前

    我学习了一个使用套接字的例子。在本例中,客户机向服务器发送打开套接字的请求,然后服务器(监听特定端口)打开套接字,一切正常,从两侧(客户机和服务器)打开套接字。

    但我仍然不清楚这种东西有多灵活。例如,客户端是否可以关闭一个已打开(从两端)的套接字并重新打开它(在服务器保持套接字打开的情况下)。

    服务器是否可以“知道”客户端上的套接字已关闭?客户端是否可以知道服务器端的套接字已关闭?

    补充:

    对我来说还有一件更重要的事。如果应用程序(没有主服务器或客户端)崩溃、异常终止、终止,会发生什么情况?它会关闭在应用程序一侧打开的所有套接字吗?

    增加2:

    如果插座一侧的应用程序被关闭(关闭、关闭、终止),然后再次打开(在同一IP地址和同一端口上)。我们应该在两个应用程序之间创建一个新的套接字,还是可以使用旧的套接字(在崩溃前创建)。

    3 回复  |  直到 11 年前
        1
  •  2
  •   Roman    15 年前

    服务器是否可以 “知道”插座在 客户端?

    当服务器试图向该客户机发送一些数据时,将引发相应的异常。

    对我来说还有一件更重要的事。什么 如果应用程序(无Mater 服务器或客户端)崩溃,异常 终止,被杀?它能全部关上吗 插座在 应用程序?

    为处理这些异常情况而创建异常。如果有一个中断并且一个客户机(或服务器)被关闭,那么当另一方试图与关闭的一方交互时,另一方将得到一个异常。

    UPD:

    如果一个应用程序在 插座关闭(关闭, 关闭,终止),然后 再次打开(在同一IP上 地址和同一端口)。我们应该吗 在两者之间创建新的套接字 或者我们可以用旧的 套接字(在崩溃前创建)。

    创建新的套接字。

        2
  •  9
  •   Community CDub    7 年前

    一个套接字可以用于很多事情,这些问题的答案都会改变,但我假设您谈论的是TCP。

    例如,客户端是否可以关闭一个已打开(从两端)的套接字并重新打开它(在服务器保持套接字打开的情况下)。

    不,因为TCP将执行“再见”,您不能再从那里获取连接。你必须再次进行三方握手,这就开始了一个全新的连接。

    服务器是否可以“知道”客户端上的套接字已关闭?客户端是否可以知道服务器端的套接字已关闭?

    Yes . TCP可以发送一个再见数据包,或者一方可以超时,在这两种情况下完全可以检测到这些场景。

        3
  •  2
  •   chandra kumar    13 年前

    Q1->服务器是否可以“知道”客户端上的套接字已关闭?客户端是否可以知道服务器端的套接字已关闭?

    A1->如果客户端关闭套接字,服务器将知道,反之亦然。实际上,fin将从末端发送,它开始关闭连接。

    问题2->如果插座一侧的应用程序被关闭(关闭、关闭、终止),然后再次打开(在同一IP地址和同一端口上),该怎么办?我们应该在两个应用程序之间创建一个新的套接字,还是可以使用旧的套接字(在崩溃前创建)。

    A2->如果创建了套接字,则fd号与IP地址和端口绑定,因此服务器端的套接字具有服务器IP&some端口,客户端的套接字具有客户端IP&some端口。如果在客户端发生崩溃,那么所有的fd都将被释放,并且不能重用。如果我们使用相同的fd,系统将把它当作普通的文件fd。