㈠ java中使用Socket连接,关闭是出异常如何处理
你光有try catch,但实际并未对产生的网络异常进行处理,然后继续循环,那自然是无限异常下去了。只要在catch到异常后进行相应处理即可,比如关闭连接,然后退出。在服务端,客户端都加上这个处理,比如在客户端加,如下
publicvoidrun()
{
while(true)
{
Useru=newUser();
u.setName("1");
ObjectOutputStreamoos;
try
{
oos=newObjectOutputStream(s.getOutputStream());
oos.writeObject(u);
}
catch(Exceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
//注意,这边会看到显示的是true,因为对方并没有调用close来关闭连接,而是直接终止程序
System.out.println(s.isConnected());
if(s!=null)
{
try
{
s.close();
s=null;
}
catch(Exceptionex)
{
ex.printStackTrace();
}
System.out.println("远程连接异常,关闭连接");
return;
}
}
}
}
注:
你的这种情况即不能用u=ois.readObject())!=null来判断,也不能用s.isConnected&&!s.isColse()来判断,因为你是直接终止服务端或者客户端的运行,而不是先close连接,再终止程序。
㈡ java里socket通信,异常处理问题。
直接用这种方式处理:
while(true){
socket=newSocket(("192.168.183.1",9002);
socket.setSoTimeout(5000);//5000ms=5s
try{
socket.connect();
}catch(IOExceptione){
//这行写你提示通信失败提示
continue;
}
}
㈢ Java socket 编程 连接失败!
如果是不停的发送数据,你可以维持一个socket长连接,当客户端连接上发送完数据后不要关闭socket,继续发送握手信息以维持连接。客户端很多的话就用线程池ThreadPoolExecutor.
具体资料:
㈣ java异常处理:关于Socket编程的
当输入过程中意外到达文件或流的末尾时,抛出此异常。 此异常主要被数据输入流用来表明到达流的末尾。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。
代码太少,无法再细说了。
㈤ 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即可。