socket发出请求对方无应答如何自动关闭socket或报错???

yingaijjgz 2013-12-15 11:21:41

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;


import javax.swing.JOptionPane;

public class Receive extends Thread
{
String friendip;
String receivepath;
DatagramSocket rds;
DatagramPacket rdp;
String msg;
public Receive(String friendip,String receivepath)
{
this.friendip=friendip;
this.receivepath=receivepath;
}
public void run()
{
try
{
try
{rds=new DatagramSocket(8880);}
catch(SocketException e)
{
JOptionPane.showMessageDialog(null, "对方无应答!", null, JOptionPane.OK_OPTION);
System.out.println("对方无应答!");//这个地方想表示没有收到对方的响应后想报错??怎么办?request部分的代码我就不贴上来了,大致就是向另外一台电脑提出请求,然后我想在他不在线的时候,我的电脑能提示对方无应答.
}
try
{
byte[] rebuf=new byte[256];
rdp=new DatagramPacket(rebuf, rebuf.length);
rds.receive(rdp);
msg=new String(rebuf,0,rdp.getLength());
rds.close();
}
catch(IOException e)
{
JOptionPane.showMessageDialog(null, "网络通讯出现错误,问题在"+e.toString(), null, JOptionPane.OK_OPTION);
}

System.out.println("Receive部分完成11111");
System.out.println("Receive msg(YES/NO):"+msg);
if(msg.equals("YES"))
{
/*int option = JOptionPane.showConfirmDialog(null,"点击确认下载或取消","P2P",JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION)
{
download();
}*/
System.out.println("Receive部分完成22222");
JOptionPane.showMessageDialog(null, "点击确认下载", null, JOptionPane.OK_OPTION);
download();

}
if(msg.equals("NO"))
{
JOptionPane.showMessageDialog(null, "对方不同意共享此文件!", null, JOptionPane.OK_OPTION);
}
}
catch (Exception e)
{
e.printStackTrace();
}


}
}
...全文
311 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingaijjgz 2013-12-15
  • 打赏
  • 举报
回复
多谢,已解决.
rds=new DatagramSocket(8880); byte[] rebuf=new byte[256]; rdp=new DatagramPacket(rebuf, rebuf.length); try { //设置超时时间,3秒 rds.setSoTimeout(3000); rds.receive(rdp); msg=new String(rebuf,0,rdp.getLength()); rds.close(); System.out.println("Receive部分完成11111"); System.out.println("Receive msg(YES/NO):"+msg); if(msg.equals("YES")) { /*int option = JOptionPane.showConfirmDialog(null,"点击确认下载或取消","P2P",JOptionPane.YES_NO_OPTION); if (option == JOptionPane.YES_OPTION) { download(); }*/ System.out.println("Receive部分完成22222"); JOptionPane.showMessageDialog(null, "点击确认下载", null, JOptionPane.OK_OPTION); download(); } if(msg.equals("NO")) { JOptionPane.showMessageDialog(null, "对方不同意共享此文件!", null, JOptionPane.OK_OPTION); } } catch (Exception e) { rds.close(); JOptionPane.showMessageDialog(null, "对方无应答!", null, JOptionPane.OK_OPTION); System.out.println("对方无应答!"); } 贴出来解决后的代码跟大家分享下.
UDBuilder 2013-12-15
  • 打赏
  • 举报
回复
要设置接收延时,在延时时间内没收到回复就会抛出异常

62,621

社区成员

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

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