因此,每当 android 应用程序在特殊活动中连接到我的服务器时(工作正常),我就有一个 Android 应用程序(客户端)和一个 Java 程序(服务器),具有一次性套接字通信。
因为我的服务器嵌入在一个更大的程序中(使用 Swing 组件,服务器从中获取信息),所以我在这里有这个(简化的)代码:
//somewhere in my Swing-Application
Server myServer = new Server();
myServer.start();
//...
public class Server extends Thread {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(8090);
try {
while (true) {
System.out.println("Server is waiting for connections...");
socket = serverSocket.accept();
startHandler(socket);
}
} finally {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void startHandler(final Socket socket) throws IOException {
System.out.println("Client connected to Server");
Thread thread = new Thread() {
@Override
public void run() {
try {
writer = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
//doing something usefull, i am sending a JSON-String, which i´ll parse in my app.
writer.write(someStringContainingJSONString);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
closeSocket();
}
}
private void closeSocket() {
try {
socket.close();
} catch (IOException e) {
}
}
};
thread.start();
}
在我的 Android 应用程序中,我有:
public void onCreate(Bundle savedInstanceState) {
viewJSON = new Runnable() {
@Override
public void run() {
getJSON();
}
};
Thread thread = new Thread(null, viewJSON, "MagentoBackground");
thread.start();
myProgressDialog = ProgressDialog.show(myActivity.this, "Please wait...", "Retrieving data ...", true);
}
private void getJSON() {
try {
socket = new Socket(serverIPAddress, SERVER_PORT);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
String help = reader.readLine();
// parse this String according to JSON, is working fine!
}
// catch and so on...
现在,每当我从 Swing 应用程序中点击“发送数据”按钮时,我希望该应用程序接收数据,以获取最新数据。
另一方面,当我在我的 Android 应用程序中进行更改时,我希望服务器接收数据(也是 JSON 字符串)。当我点击特定按钮时,也应该发送字符串。
我怎样才能做到这一点?问题是线程问题(否则我的摇摆应用程序将无法工作)与网络相结合。如果我不关闭套接字,我将无法正常继续我的程序(或者至少,我的代码现在看起来如此)你能帮我吗?非常感谢您的帮助和想法。最好的,安德里亚