当前位置: 技术问答>java相关
求助socket超时控制编程的问题(java)!!!!急急!!!!
来源: 互联网 发布时间:2015-07-19
本文导语: 在用socket编程时,我给对方发送一个数据包后,等对方给我回发一个数据包,但如果在规定时间内(20秒),我没有收到对方的响应,则我需重发我刚才发的数据包,但问题时我不知道怎样控制等待时间? 。。。 Input...
在用socket编程时,我给对方发送一个数据包后,等对方给我回发一个数据包,但如果在规定时间内(20秒),我没有收到对方的响应,则我需重发我刚才发的数据包,但问题时我不知道怎样控制等待时间?
。。。
Inputstream ips;
DataInputstream disp
Outstream ops;
DataOutputstream dops;
...
socket1=new socket("11.1.1.1",12099);
..
public void send()
{
byte[] s={1,1,1};
ops=socket1.getOutputstream();
dops=new DataOutputstream(ops);
dops.write(s);
}
public byte[] receive()
{
ips=socket1.getInputstream();
dips=new DataInputstream(ips);
byte[] r=dips.read(ips);
return r;
}
public main_run()
{
//发送数据
send();
//接收数据
byte[] x=receive();
//我在这里怎样知道和控制receive()执行时间超过20秒后我就重新send()呢?
}
急急急!!!!!!!!!!!!!!!!!!!!!!!
。。。
Inputstream ips;
DataInputstream disp
Outstream ops;
DataOutputstream dops;
...
socket1=new socket("11.1.1.1",12099);
..
public void send()
{
byte[] s={1,1,1};
ops=socket1.getOutputstream();
dops=new DataOutputstream(ops);
dops.write(s);
}
public byte[] receive()
{
ips=socket1.getInputstream();
dips=new DataInputstream(ips);
byte[] r=dips.read(ips);
return r;
}
public main_run()
{
//发送数据
send();
//接收数据
byte[] x=receive();
//我在这里怎样知道和控制receive()执行时间超过20秒后我就重新send()呢?
}
急急急!!!!!!!!!!!!!!!!!!!!!!!
|
对Socket设置Sotimeout参数,用Socket.setSotimeout(int i);
注意捕获InterruptedException 异常。
例如:
socket1.setSotimeout(20000);//20seconds
ips=socket1.getInputstream();
dips=new DataInputstream(ips);
建议输入输出流放到send(),receive方法外面去定义
byte[] r= new byte[1024];//定义一个接收缓冲字节数组
同时修改你的receive()方法
public byte[] receive() throws InterruptedException
{
try{
dips.read(r);
}
catch(InterruptedException ie){ throw new InterruptedException("read out of time");}
}
使这个方法抛出InterruptedException
在main()里可以起一个while(true){}
在try块里捕获InterruptedException,如果捕获到,就是读超时,在做相应处理
注意捕获InterruptedException 异常。
例如:
socket1.setSotimeout(20000);//20seconds
ips=socket1.getInputstream();
dips=new DataInputstream(ips);
建议输入输出流放到send(),receive方法外面去定义
byte[] r= new byte[1024];//定义一个接收缓冲字节数组
同时修改你的receive()方法
public byte[] receive() throws InterruptedException
{
try{
dips.read(r);
}
catch(InterruptedException ie){ throw new InterruptedException("read out of time");}
}
使这个方法抛出InterruptedException
在main()里可以起一个while(true){}
在try块里捕获InterruptedException,如果捕获到,就是读超时,在做相应处理
|
如果捕捉到InterruptedException 这个异常说明对方没有写数据过来,这样你就可以把进行其它处理了
try{
socket1.setSotimeout(20000);//20seconds
ips=socket1.getInputstream();
dips=new DataInputstream(ips);
}
catch(InterruptedException ie)
{
//在此调用再次写数据操作
;}
}
try{
socket1.setSotimeout(20000);//20seconds
ips=socket1.getInputstream();
dips=new DataInputstream(ips);
}
catch(InterruptedException ie)
{
//在此调用再次写数据操作
;}
}