[Socket网络编程]由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
原文地址:http://blog.sina.com.cn/s/blog_70bf579801017ylu.html,记录在此方便查看
解决办法:
MSDN的说明:
Close 方法可关闭远程主机连接,并释放所有与 Socket 关联的托管资源和非托管资源。关闭后,Connected 属性将设置为 false。
对于面向连接TCP的协议,建议先调用 Shutdown,然后再调用 Close 方法。这可以确保在已连接的套接字关闭之前,已发送和接收该套接字上的所有数据。
如果需要在不首先调用 Shutdown 的情况下调用 Close,则可以将 DontLingerSocket 选项设置为 false,并且指定一个非零的超时间隔,从而可以确保排队等待输出的数据得到发送。这样,Close 将会一直阻止到发送完该数据或指定的时限超时为止。如果将 DontLinger 设置为 false,并且指定了一个非零的超时间隔,Close 将会释放连接并自动放弃排队等待输出的数据。
aSocket.Shutdown(SocketShutdown.Both); aSocket.Close();
调用Shutdown方法,可以让应用程序不在接受和发送数据,和确保正在传输队列的数据继续传输,保证双方都能收到应用程序发出的所有数据
Shutdown的参数有三个取值Both, Receive, Send
Receive表示让应用程序不在接受数据
而Close()方法,会直接释放套接字的描述,会丢弃与套接字描述相关的所有资源,包括传输队列中的数据。这样可能造成传输的数据丢失
所以对于面向连接TCP的套接字,应该先调用Shutdown方法在调用Close方法
问题:
调用Shutdown方法产生以下异常
由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
-
博客地址:http://www.cnblogs.com/wolf-sun/
博客版权:如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。