我正在为一款处理大量TCP连接的游戏创建一个服务器,并且我需要处理突然失去的连接(PC崩溃,游戏进程死亡,互联网连接丢失,保护)。我现在遇到的问题是,我无法分辨出写入错误的读取错误,因为两者都抛出了IOException
。即使潜在的例外是相同的(SocketException
),唯一的区别是分别发生在Socket.Send()
和Socket.Receive()
上。当然,我可以比较异常消息,但只要系统语言发生变化就会成为问题(并且说实话,无论如何这将是一个相当混乱的方法)。如何区分套接字中写入错误的读取错误?
我试过比较Hresult
,但由于底层的例外情况相同,因此Hresult
也是如此。我也试过getHashCode()
,但是这个从玩家变成玩家。
我可以通过其他方式分辨出这两种情况吗? 为了澄清,我们正在讨论在连接意外关闭的TcpClient
上使用TcpClient.read()
或TcpClient.write()
时出现的异常。
['TcpClient'](https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(v = vs.110)的.aspx)类型没有'read()'和'write()'函数。什么是tcp客户端的确切类型? – KernelMode
你可以在socket.send和socket.receive两处捕获IOException,并用更多的具体细节重新抛出另一个异常,甚至处理丢失的连接。 – ajg
另请注意,只有在套接字写入尝试中才会发现一些常规错误。这并不意味着他们是“写”错误。 –