这个客户端服务器程序只运行一次,android发送字符串到服务器和服务器转发到arduino。当我第一次发送arduino得到它但当我第二次发送服务器收到它但不转发给arduino。我看不出问题。如果有人能帮助我,我感激不尽。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
private ServerSocket serverSocket;
String type1;
String type;
Socket socket;
Socket s;
DataOutputStream dos;
private ClientHandler c = new ClientHandler();
private Connection con = new Connection();
public server(int port) {
try {
serverSocket = new ServerSocket(port);
new Connection().start();
// new ClientHandler().start();
} catch (IOException e) {}
}
private class Connection extends Thread {
public void run() {
//Socket socket;
while (true) {
try {
socket = serverSocket.accept();
// DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
System.out.println("connected");
DataInputStream dis = new DataInputStream(socket.getInputStream());
type = dis.readUTF();
System.out.println("jag fick det från android: " + type);
new ClientHandler().start();
dis.close();
//c.run();
} catch (IOException e) {}
}
}
}
private class ClientHandler extends Thread {
public void run() {
//System.out.println("1");
try {
// System.out.println("2");
socket = serverSocket.accept();
// System.out.println("3");
System.out.println("got it");
dos = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true) {
try {
if (type == null) {
//break;
continue;
}
// System.out.println("4");
//DataInputStream dis1 = new DataInputStream(s.getInputStream());
//type1 = dis1.readUTF();
//System.out.println("3");
dos.writeUTF(type);
System.out.println("jag fick det från ardunio: " + type);
//dos.flush();
//dos.close();
// con.run();
// type = null;
//socket.close();
break;
//continue;
} catch (IOException e2) {}
}
}
}
public static void main(String[] args) {
new server(3389);
System.out.println(" Server startar");
}
}
答案 0 :(得分:0)
您只能从套接字读取一次。 ClientHandler
应该在其循环中执行所有I / O:在accept循环中不应该完成任何操作。
NB Connection
是一个接受循环类的糟糕名称。您不需要它作为数据成员。 Socket以及输入和输出流应该是ClientHandler
的成员,而不是server
的成员。