当前位置:编程学习 > JAVA >>

socket编程求助

写了个服务器端,接受客户端socket连接,部署到本机上访问没有问题。

但是部署到阿里云服务器上访问就会有问题,如下:



百度和谷歌也都搜了下,没有什么满意的答案,哪位了解的,还望指点下,谢谢! socket java 服务器 客户端 阿里云 --------------------编程问答-------------------- 阿里云服务器接受任意端口的侦听吗?不太可能吧。 --------------------编程问答-------------------- 本机和阿里云服务器网络环境参数不一样,会导致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参数,可能由于不同的操作系统导致不同的结果。 --------------------编程问答--------------------
引用 1 楼 remember1989 的回复:
阿里云服务器接受任意端口的侦听吗?不太可能吧。


只要监听需要的端口就可以了,不是端口的问题。 --------------------编程问答--------------------
引用 2 楼 shnulaa 的回复:
本机和阿里云服务器网络环境参数不一样,会导致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参数,可能由于不同的操作系统导致不同的结果。


客户端是C++写的,服务端是用Mina框架的。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,