写了个服务器端,接受客户端socket连接,部署到本机上访问没有问题。但是部署到阿里云服务器上访问就会有问题,如下:百度和谷歌也都搜了下,没有什么满意的答案,哪位了解的,还望指点下,谢谢!socketjava服务器客户端阿里云

解决方案 »

  1.   

    本机和阿里云服务器网络环境参数不一样,会导致socket的大不一样
    控制socket的因素参数还是蛮多的,有一部分是依赖操作系统的参数。可以去控制一下服务端的参数的调配,以下是可能需要要重新设置的参数 // 接受与发送的数据大小
     channel.socket().setReceiveBufferSize(getTxBufSize());
     channel.socket().setSendBufferSize(getTxBufSize());
     // 设置tcp包是否有延迟
     channel.socket().setTcpNoDelay(getTcpNoDelay());
     // 设置连接是否存活
     channel.socket().setKeepAlive(getSoKeepAlive());
     // TCP的紧急指针,一般都不建议使用,而且不同的TCP/IP实现,也不同,一般说如果你有紧急数据宁愿再建立一个新的TCP/IP连接发送数据,让对方紧急处理
     channel.socket().setOOBInline(getOoBInline());
     // 绑定套接字前启用 SO_REUSEADDR 允许在上一个连接处于超时状态时绑定套接字。
     channel.socket().setReuseAddress(getSoReuseAddress());
     // close关闭的的延迟时间,为了尽可能将package发送出去。
     // 在默认情况下,当调用close方法后,将立即返回;如果这时仍然有未被送出的数据包,那么这些数据包将被丢弃。如果将linger参数设为一个正整数n时(n的值最大是65,535),在调用close方法后,将最多被阻塞n秒。在这n秒内,系统将尽量将未送出的数据包发送出去;如果超过了n秒,如果还有未发送的数据包,这些数据包将全部被丢弃;
     channel.socket().setSoLinger(getSoLingerOn(),getSoLingerTime());
     // socket的超时时间
     channel.socket().setSoTimeout(getTimeout());尤其是Linger参数,可能由于不同的操作系统导致不同的结果。
      

  2.   


    客户端是C++写的,服务端是用Mina框架的。