Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么接收对等机上的套接字继续接收'';当我使用“无限”;控制-c“;关闭发送对等机上的套接字_C_Sockets_Tcp_Exit_Control C - Fatal编程技术网

为什么接收对等机上的套接字继续接收'';当我使用“无限”;控制-c“;关闭发送对等机上的套接字

为什么接收对等机上的套接字继续接收'';当我使用“无限”;控制-c“;关闭发送对等机上的套接字,c,sockets,tcp,exit,control-c,C,Sockets,Tcp,Exit,Control C,我是socket编程的新手,我知道使用“control-c”关闭socket是一个坏习惯,但为什么在我使用“control-c”关闭发送过程后,接收端的socket会无限地继续接收“”?在“control-c”退出进程后,发送对等机上的套接字不应该关闭吗?谢谢 没有给出代码,但这里有一个关于可能发生的情况的有根据的猜测: 您有两个独立的代码位在运行:发送和接收 当您使用CTL+C终止发送套接字时,您正在传输数据 您希望接收套接字停止,但它没有停止 问题可能是“传输结束”协议之一。如果在点击CTL

我是socket编程的新手,我知道使用“control-c”关闭socket是一个坏习惯,但为什么在我使用“control-c”关闭发送过程后,接收端的socket会无限地继续接收“”?在“control-c”退出进程后,发送对等机上的套接字不应该关闭吗?谢谢

没有给出代码,但这里有一个关于可能发生的情况的有根据的猜测:

  • 您有两个独立的代码位在运行:发送和接收
  • 当您使用CTL+C终止发送套接字时,您正在传输数据
  • 您希望接收套接字停止,但它没有停止
  • 问题可能是“传输结束”协议之一。如果在点击CTL+C时发送代码触发文件结束(EOF)(或中止或终止),那么接收套接字应该看到并退出接收。但是,在点击CTL+C时,您还没有说明发送代码在做什么

    接收套接字可能只是在等待更多数据;就接收代码而言,它将在传输完成时被告知,并且它正在耐心等待更多信息

    有比我好得多的socket程序员,但我认为可以肯定地说,一旦你达到了这个水平,你应该注意传输协议的细节。如果CTL+C只是终止服务器(发送)代码,那么客户机不知道是否存在真正的终止、传输中的意外延迟,或者服务器进程只是大脑放屁,一旦事情解决,它将再次开始发送

    如果您有任何方法来监视返回的实际值,请查看在数据传输的“正常”终止和CTL+C终止期间发生的情况。这可能有助于你关注不良行为

    我知道用“control-c”关闭插座是个坏习惯

    这将关闭整个过程,而不仅仅是一个套接字

    为什么在我使用“control-c”关闭发送进程后,接收对等机上的套接字一直无限地接收“”

    猜测一下,如果没有看到您应该在问题中发布的代码,那么在调用
    recv()时,您将忽略错误和流结束。

    在“control-c”退出进程后,发送对等机上的套接字不应该关闭吗

    是的。整个过程是“封闭的”,包括其所有资源


    关于接收插座,由您检测其应关闭的条件,并将其关闭。

    准确的副本。既然你已经这样做了,并且得到了一个你表示理解的问题,为什么还要再问这个问题?@EJP:当第一次问另一个问题时,你为什么把另一个问题标记为这个问题的副本?这个问题是重复的。@RemyLebeau我已经因为另一个原因投票结束了这个问题。对不起,我的错,我没有完全理解,我只是通过TCP,我想现在我理解了,对不起this@EJP