【发布时间】:2014-07-23 04:47:26
【问题描述】:
我使用 Java 中的套接字编程。我连接了一台电脑和安卓平板电脑。服务器是电脑,客户端是平板电脑。当我首先启动平板电脑时,无法连接套接字。但是,当我首先启动 pc 时,可以连接套接字。为什么会这样?问题出在哪里?
电脑代码:
`
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ServerSocket listener = null;
Socket socket = null;
System.out.println("Opened");
try {
listener = new ServerSocket(1515);
} catch (IOException e1) {
// TODO Auto-generated catch block
System.out.println(e1.getMessage());
}
String answer = null;
while(true)
{
try {
socket = listener.accept();
DataInputStream input =
new DataInputStream(socket.getInputStream());
answer = input.readInt()+ " ";
answer = answer + input.readInt();
input.close();
dName.setText(answer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
});
t.start();
`
平板电脑代码:
@Override
public void run() {
// TODO Auto-generated method stub
boolean check = false;
while(!check)
{
try {
check = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, 2, 86 }).isReachable(1000);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
while(!socket.isConnected()){
try {
socket.connect(sockaddr, 1000);
// DataInputStream input =
// new DataInputStream(socket.getInputStream());
// int result = input.readInt();
// if(result == -2)
// {
// MainActivity.MainAct.StartUpdateActivity();
// }
} catch (IOException e) {
// TODO Auto-generated catch block
//text.setText(e.getMessage());
System.out.println(e.getMessage());
}finally{
}
}
编辑:第一个 while ,即使用 InetAddress.isReachable 的检查条件,始终为 TRUE。这意味着 isReachable 在任何时候都是错误的。当我删除它时,可以建立连接。但是,问题仍然是一样的。
【问题讨论】:
-
只需摆脱 isReachable() 调用。没有用。套接字连接将成功或失败。这就是你所需要的。
标签: java android sockets connection client-server