2011-12-12 105 views
0

我正在使用C#WebSocket服务器(当前由http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17支持)。 服务器正在使用.NET的Socket对象来让服务器侦听并为每个客户端发送和接收消息。WebSocket服务器,由远程主机强制关闭的连接

我构建了一个连接到服务器的Web客户端,它可以连接成功,我可以在客户端之间发送消息。

一切都很好!

现在,如果我连接到服务器并使其保持客户端的同时不发送邮件时,服务器抛出,上面写着一个例外:

的Int32发送(字节[],的Int32,的Int32, System.Net.Sockets.SocketFlags):一个 现有连接被远程主机强制关闭。

唯一的例外,因为你可以看到的是从服务器的客户端套接字的发送方法,这是看起来很有线,因为我没有从客户端,并没有一个将数据发送到该客户端发送的任何数据回到那里怎么可能发送方法可以抛出一个异常,为什么这个异常抛出?

+0

您可以发送发送代码(特别是引发异常的行)吗? – spender

+0

...另外,你是否知道WebSockets将直接支持.Net4.5? – spender

+0

是的,我知道在.Net 4.5中的WebSocket,但我不知道它什么时候会发布。 – udidu

回答

0

它被称为超时!

WebSockets只是TCP/IP原始套接字(.NET中的Socket类)的封装 - 如果没有发送任何超时,并且没有任何内容保持连接活着。

AFAIK目前WebSocket API并没有很好的定义,只要如何保持连接活着。我遇到同样的情况,不得不切换到使用ping(空消息)来保持连接活着(我正在使用Microsoft套接字实现)。

如果您对于非最终规格的reinventing the wheel,请记住,每当规范发生变化时,您都必须不断重新创建它。我特别选择使用Microsoft套接字预览,以便在发布时我几乎不需要更改任何代码。我不会在IIS中运行 - 我作为控制台应用程序运行,目前它的运行状况非常好,但我的用户非常少。

注意:我遇到的问题导致我发现这个问题,如果我发送10条消息而没有收到回复,则连接关闭。我仍在研究这是为什么 - 无论它是WebSockets的缺陷/功能还是Socket类的一个特性。有可能我达到了65kb的限制,但我的信息很小,我不认为这是为什么。在测试你正在工作的任何东西时要注意这一点,因为它给出了你得到的同样的错误。

0

我假设你已经排除了服务器和客户端之间不同协议的使用(愚蠢的假设,但你永远不知道)。

如果您的代码没有事先从客户端接收到达发送方法,那么显然服务器代码有问题。使用追踪和/或日志获取更多的信息,即使对于abc的进入等待接收,接收,接收,退出接收等。

+0

“如果您的代码没有事先从客户端接收到达发送方法,那么显然服务器代码有问题”。我已经知道了......并且我所做的日志会将我引导至我收到的错误消息。 – udidu

+0

您可以将您的日志记录扩展为上述的abc。 – 2011-12-12 19:01:07

+0

你是什么意思abc的? – udidu

相关问题