当前位置: 技术问答>java相关
applet中socket连接服务器serversocket对象??
来源: 互联网 发布时间:2017-04-07
本文导语: applet程序如下: import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.net.*; class NotHelloWorldPanel extends JPanel implements ActionListener { public NotHelloWorldPanel() { setLayout(new BorderLayout()); ...
applet程序如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class NotHelloWorldPanel extends JPanel implements ActionListener
{ public NotHelloWorldPanel()
{ setLayout(new BorderLayout());
d = new JTextField("0");
add(d, "North");
try
{
s = new Socket("192.0.0.1",7);
s.setSoTimeout(10000);
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
boolean more = true;
while (more)
{ String line = in.readLine();
if (line == null)
more = false;
else
d.setText(line);
}
}
catch (IOException e)
{ d.setText("error"+e);
}
}
private JTextField d;
private Socket s;
}
public class NotHelloWorldApplet extends JApplet
{ public void init()
{ Container contentPane = getContentPane();
contentPane.add(new NotHelloWorldPanel());
}
}
服务器上IP为192.0.0.1,侦听端口为7,为什么报timeout???
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class NotHelloWorldPanel extends JPanel implements ActionListener
{ public NotHelloWorldPanel()
{ setLayout(new BorderLayout());
d = new JTextField("0");
add(d, "North");
try
{
s = new Socket("192.0.0.1",7);
s.setSoTimeout(10000);
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
boolean more = true;
while (more)
{ String line = in.readLine();
if (line == null)
more = false;
else
d.setText(line);
}
}
catch (IOException e)
{ d.setText("error"+e);
}
}
private JTextField d;
private Socket s;
}
public class NotHelloWorldApplet extends JApplet
{ public void init()
{ Container contentPane = getContentPane();
contentPane.add(new NotHelloWorldPanel());
}
}
服务器上IP为192.0.0.1,侦听端口为7,为什么报timeout???
|
Socket or ServerSocket的setSotimeout(int)是这样用的
设置了Sotimeout参数,如你设置的s.setSoTimeout(10000);
是从一输入流中读取数据,此时阻塞,当读了10s后,如没有读到,就会产生一个
InterruptedIOException异常。一定要捕获他,read方法就可以返回了。
一般可以这样写:
while(true){
try{
//read data and others methods
}
catch(InterruptedIOException ioe){}
}
放在一个循环里,读超时,捕获InterruptedIOException,返回到循环再读下一次。
你部获得IOException是InterruptedIOException的超类,其实你想捕获SocketException的,他也是IOException的超类,无意中捕获了InterruptedIOException,但是是在while(more){}的外面捕获,所以10s后没有数据,就出现error:....了。
明白了吗?
设置了Sotimeout参数,如你设置的s.setSoTimeout(10000);
是从一输入流中读取数据,此时阻塞,当读了10s后,如没有读到,就会产生一个
InterruptedIOException异常。一定要捕获他,read方法就可以返回了。
一般可以这样写:
while(true){
try{
//read data and others methods
}
catch(InterruptedIOException ioe){}
}
放在一个循环里,读超时,捕获InterruptedIOException,返回到循环再读下一次。
你部获得IOException是InterruptedIOException的超类,其实你想捕获SocketException的,他也是IOException的超类,无意中捕获了InterruptedIOException,但是是在while(more){}的外面捕获,所以10s后没有数据,就出现error:....了。
明白了吗?