none
vb.net socket关闭重新打开问题 RRS feed

  • 问题

  • 第一次使用connectasync,连接服务器没问题,使用disconnectasync关闭也没问题。

    再次使用connectasync打开socket,就出现如下错误

    A request to send or receive data was disallowed because the socket had  already been shut down in that direction with a previous shutdown call!

    哪位高手看下是什么问题。

    2013年12月18日 8:31

答案

  • 我做了一个测试,不调用send和receive,还是第一次可以打开,第二次就打开不了了,只能用new 来解决吗?

    只能 new ,这是设计使然。测试如下代码:

    Socket.Connect;

    Socket.Disconnect;

    Socket.Connect;

    Socket.Disconnect;

    2013年12月20日 2:17

全部回复

  • 你说的是你再次调用 ConnectAsync 后,接着调用 Send Or Receive 方法时,抛出的异常,对吗?

    如果是的话,异常描述的信息是连接已经被之前的一次 Shutdown 调用关闭了,所以你无法 Send Or Receive 数据。

    2013年12月18日 9:21
  • 你好:

    请参考MSDN上的文档,注意错误编码10058:

    Winsock Error Codes

    错误的原因应该是你在socket关闭之后尝试发送消息,建议你debug找到抛出异常的代码块,然后分析下为什么发送消息的时候socket是关闭状态的。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年12月19日 9:14
    版主
  • 如果已经关闭了,就不能再次打开这个socket了吗?一定要new才行?我要实现的功能就是socket能够随时打开,关闭。
    2013年12月19日 14:28
  • 我做了一个测试,不调用send和receive,还是第一次可以打开,第二次就打开不了了,只能用new 来解决吗?
    2013年12月19日 14:30
  • 我做了一个测试,不调用send和receive,还是第一次可以打开,第二次就打开不了了,只能用new 来解决吗?

    只能 new ,这是设计使然。测试如下代码:

    Socket.Connect;

    Socket.Disconnect;

    Socket.Connect;

    Socket.Disconnect;

    2013年12月20日 2:17