zoukankan      html  css  js  c++  java
  • [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 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。

  • 相关阅读:
    16、集合--Map接口
    LVM快照备份与恢复
    CentOS 6.3下配置LVM(逻辑卷管理)
    Tomcat 9.0 配置问题 403 Access Denied
    nginx和php-fpm调用方式
    Linux下安装php环境并且配置Nginx支持php-fpm模块
    Nginx 服务器安装及配置文件详解
    Linux编辑器vim键盘详解
    Nginx配置文件详解
    keepalive配置文件详解
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/3366156.html
Copyright © 2011-2022 走看看