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#套接字类+;套接字类 < >我将现有C++应用程序的客户端改写为C。服务器应用程序将继续用C++编写。通信一直正常工作,直到服务器关闭套接字为止。架构如下所示,使用异步发送和接收: 客户端:将数据发送到服务器 服务器:从客户端接收数据 服务器:向客户端发送数据(文件) 服务器:关闭套接字 客户端:从服务器接收数据 在程序的旧C++版本中,数据已经在套接字上,即使套接字连接的一侧关闭,数据仍然可用。从我对C#的理解来看,一旦一半连接关闭,就会发送一个重置连接数据包,C#会收到一个异常,这会阻止我接收其余的数据。(我只收到1个文件,而不是2个文件,因为服务器在发送信息后关闭了套接字)_C#_Sockets - Fatal编程技术网

与C+通信的C#套接字类+;套接字类 < >我将现有C++应用程序的客户端改写为C。服务器应用程序将继续用C++编写。通信一直正常工作,直到服务器关闭套接字为止。架构如下所示,使用异步发送和接收: 客户端:将数据发送到服务器 服务器:从客户端接收数据 服务器:向客户端发送数据(文件) 服务器:关闭套接字 客户端:从服务器接收数据 在程序的旧C++版本中,数据已经在套接字上,即使套接字连接的一侧关闭,数据仍然可用。从我对C#的理解来看,一旦一半连接关闭,就会发送一个重置连接数据包,C#会收到一个异常,这会阻止我接收其余的数据。(我只收到1个文件,而不是2个文件,因为服务器在发送信息后关闭了套接字)

与C+通信的C#套接字类+;套接字类 < >我将现有C++应用程序的客户端改写为C。服务器应用程序将继续用C++编写。通信一直正常工作,直到服务器关闭套接字为止。架构如下所示,使用异步发送和接收: 客户端:将数据发送到服务器 服务器:从客户端接收数据 服务器:向客户端发送数据(文件) 服务器:关闭套接字 客户端:从服务器接收数据 在程序的旧C++版本中,数据已经在套接字上,即使套接字连接的一侧关闭,数据仍然可用。从我对C#的理解来看,一旦一半连接关闭,就会发送一个重置连接数据包,C#会收到一个异常,这会阻止我接收其余的数据。(我只收到1个文件,而不是2个文件,因为服务器在发送信息后关闭了套接字),c#,sockets,C#,Sockets,我可以发布我的代码,但它实际上只是一个简单的异步发送和接收。如果我在服务器的socketclose功能之前一步一步地完成代码并暂停,那么一切都会按预期进行。实际的异常错误是“远程主机强制关闭了一个现有连接。”因此您完全知道那里发生了什么。我看不出有什么问题。你的课文中没有问号。你只是让服务器等待客户端确认他收到了消息。我想我的问题是我不明白为什么会出现错误。在C++应用程序的C++版本中,服务器关闭了Socket,客户端仍然能够从套接字中获取数据,没有任何错误。在C#中,它似乎不应该有任何不同,

我可以发布我的代码,但它实际上只是一个简单的异步发送和接收。如果我在服务器的socketclose功能之前一步一步地完成代码并暂停,那么一切都会按预期进行。实际的异常错误是“远程主机强制关闭了一个现有连接。”

因此您完全知道那里发生了什么。我看不出有什么问题。你的课文中没有问号。你只是让服务器等待客户端确认他收到了消息。我想我的问题是我不明白为什么会出现错误。在C++应用程序的C++版本中,服务器关闭了Socket,客户端仍然能够从套接字中获取数据,没有任何错误。在C#中,它似乎不应该有任何不同,但它确实给了您一个我似乎无法处理的错误。我也不应该修改任何服务器代码。我需要亲自尝试以确保,但看起来这是一个边缘案例,也许我们可以称之为服务器程序中的错误。因此,根据我们掌握的有限信息,我认为应该修复一个bug。我知道他们可能将其定义为“不更改”,但他们是否知道存在缺陷?我不认为这是一个缺陷,因为以前的cilent/server应用程序工作得很好。我认为更多的是理解C#如何处理中间连接。我试图跟随下面链接的线程,但没有成功。当然,他们的问题略有不同,但结果是相同的错误。请明白,它在C++中工作的纯事实并不能证明没有bug。但更重要的是:在关闭连接之前,您应该始终确认您在另一端收到了整个消息。像你这样开火然后忘记并不是一种可靠的网络通信方式。