❶ java:设置Socket超时的setSoTimeout如何理解
您好,提问者:
setSotimeout(10000)是表示如果对方连接状态10秒没有收到数据的话强制断开客户端。
如果想要长连接的话,可以使用心跳包来通知服务器,也就是我没有发给你数据,但是我告诉你我还活着。
❷ Java:这两种设置Socket超时时间的方法有什么不同吗
connect timeout 是连接超时, 比如30秒内连接不上。
Socket timeout 是连接上以后,server没有回应的超时。
❸ java如何设定socket等待连接时的超时时间
如果IP或端口填错了 就用socket 的 setSoTimeout(timeout);这个方法 这个是连接超时时间,单位是毫秒,就是在timeout/1000秒内如果没有完成TCP连接,就会触发超时异常。
❹ 用java的socket链接自己的电脑和阿里云服务器,出现连接超时错误,怎么办
说下 debug的思路 你把 服务端和客户端的代码 都在本地跑一把,用不同的端口,测试是不是代码的问题, 然后把这些代码全部部署到阿里云服务器上面去,看看在阿里云服务器上是否有问题,
然后你把你服务端的代码 部署到 阿里云上面去,首先你需要知道阿里云的外网IP, 首先你在ping 阿里云的外网IP ,能不能ping 通,查看你本地是否可以连接到 阿里云。这里面你需要注意的是 阿里云服务器本身的设置,是否开启的防火墙,是否允许对应的端口,这里有一堆网络设置的问题,能想到的就这些。 如果能ping通的话,很大可能是 阿里云服务器的网络配置问题,防火墙,端口,访问策略,允许访问的IP,不是运维,想到的就这么多
❺ java socket通信如何设置连接时长
使用jdk中的setSoTimeout(inttimeout)方法,以毫秒为单位。
参考代码:
SocketAddressaddress=newInetSocketAddress("192.168.0.104",8888);
ServerSockets=newServerSocket();
s.bind(address);
Socketsocket=s.accept();
socket.setSoTimeout(5*1000);//5秒钟
将此选项设为非零的超时值时,在与此Socket关联的InputStream上调用read()将只阻塞此时间长度。
如果超过超时值,将引发java.net.SocketTimeoutException,虽然Socket仍旧有效。选项必须在进入阻塞操作前被启用才能生效。
另外:超时值必须是>0的数。超时值为0被解释为无穷大超时值。
❻ java.net.SocketTimeoutException: Read timed out
具体的解决方法如下:
修改tomcat配置文件server.xml,找到类似于下面配置:
<Connector port="8086" maxHttpHeaderSize="8192"。
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"。
enableLookups="false" redirectPort="8443" acceptCount="100"。
connectionTimeout="20000" disableUploadTimeout="true" /> 。
将上面的参数disableUploadTimeout值改为false即可。
❼ java socket 超时 异常 求解决 java.net.SocketTimeoutException: Read timed out
这个应该有配置超时的地方吧,你把超时时间配置的长一点,另外就是在你调用的地方记录日志观察你这个远程调用耗时到底是多少。
❽ java,socket连接如何设置超时
socket.setSoTimeout(int timeout);
恩。应该能实现你的要求
首先socket不是一个阻塞方法,它不会自动去连serverSocket,而是你connect一次它就去连一次,socket本身不存在什么连接server端超时,所以客户端的连接超时是由你的程序去控制的,比如用线程。
其次,恶意连接这个问题,其实我已经给你解决了,在server端拿到socket后,不就能用socket.setSoTimeout()来设置连接时间了么?
❾ 在JAVA中,如何设定socket连接的时间超时时间等参数,
Socket类里有一个setTimeout()函数,可以设定socket上读请求的超时时间;还有在connect()函数中,可以在第二个参数中指定socket连接超时时间。具体可以看看API文档。
❿ java socket 客户端设置未接收到数据的超时问题
建议如果是长时间没有收到数据的话,或者是不想长时间等待的话,都可以通过设置超时时间来进行断开连接,之后继续处理逻辑(设置socket的setSoTimeout方法实现即可,时间单位是毫秒):
packagesocket;
importjava.io.ByteArrayOutputStream;
importjava.io.InputStream;
importjava.net.InetSocketAddress;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.net.SocketAddress;
importjava.net.SocketException;
importjava.net.SocketTimeoutException;
importjava.text.SimpleDateFormat;
importjava.util.Arrays;
importjava.util.Date;
publicclassSocketService{
publicstaticvoidmain(String[]args){
try{
SocketAddressaddress=newInetSocketAddress("192.168.9.155",3000);
//启动监听端口8001
ServerSocketss=newServerSocket();
ss.bind(address);
//接收请求
Sockets=ss.accept();
newThread(newT(s)).start();
}catch(Exceptione){
e.printStackTrace();
}
}
}
classTimplementsRunnable{
publicvoidrun(){
try{
System.out.println(socket.toString());
socket.setKeepAlive(true);
socket.setSoTimeout(5*1000);
String_pattern="yyyy-MM-ddHH:mm:ss";
SimpleDateFormatformat=newSimpleDateFormat(_pattern);
while(true){
System.out.println("开始:"+format.format(newDate()));
try{
InputStreamips=socket.getInputStream();
ByteArrayOutputStreambops=newByteArrayOutputStream();
intdata=-1;
while((data=ips.read())!=-1){
System.out.println(data);
bops.write(data);
}
System.out.println(Arrays.toString(bops.toByteArray()));
}catch(SocketTimeoutExceptione){
e.printStackTrace();
}catch(SocketExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}
Thread.sleep(1000);
System.out.println(socket.isBound());//是否邦定
System.out.println(socket.isClosed());//是否关闭
System.out.println(socket.isConnected());//是否连接
System.out.println(socket.isInputShutdown());//是否关闭输入流
System.out.println(socket.isOutputShutdown());//是否关闭输出流
System.out.println("结束:"+format.format(newDate()));
}
}catch(Exceptione){
e.printStackTrace();
}
}
privateSocketsocket=null;
publicT(Socketsocket){
this.socket=socket;
}
publicSocketgetSocket(){
returnsocket;
}
publicvoidsetSocket(Socketsocket){
this.socket=socket;
}
}