如何设置sokcet超时

loskill 2008-02-18 12:01:29
代码运行到new Socket("...",...);停了很久,然后就报超时错误了。主机的IP是可以ping通的。
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:464)
at java.net.Socket.connect(Socket.java:414)
at java.net.Socket.<init>(Socket.java:310)
at java.net.Socket.<init>(Socket.java:125)
at cmpp.Testapp.Run(Testapp.java:38)
at cmpp.Testapp.main(Testapp.java:69)
...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫叶rain 2008-02-18
  • 打赏
  • 举报
回复
socket.setSoTimeout(int timeout);
一个自然的处理思路是采用超时机制。在java.net.socket中很容易找到超时控制选项SO_TIMEOUT,通过SetSoTimeout()方法便可以指定一个由系统设计者规定的时间间隔,程序员只需要简单地设置一个例外捕获处理代码即可
wuxo84 2008-02-18
  • 打赏
  • 举报
回复
用inetSocketAddress,像我以上写的那样
wuxo84 2008-02-18
  • 打赏
  • 举报
回复

/**
* connect to server
* @param the hostname, the server's listening port
* */
private boolean connectTo(String hostName, int port) throws IOException
{
boolean result = false;
//displayMessage( "Attempting connection" );

//create socket to make connection to server
applet = new Socket();
try
{
//InetSocketAddress is the subclass of abstruct class SocketAddress
InetSocketAddress inetSocketAddress = new InetSocketAddress(
InetAddress.getByName( hostName ), port );
//if > 60 seconds, then close
applet.connect( inetSocketAddress, 60000 );

//display connection information
//displayMessage( "Connect to: " + applet.getInetAddress().getHostName() );

result = true;
}
catch(SocketTimeoutException e)
{
System.out.println( "Cannot connect ..." );
}
catch(Exception e)
{
System.out.println( e );
}

return result;
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧