1

因此,每当 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 字符串)。当我点击特定按钮时,也应该发送字符串。

我怎样才能做到这一点?问题是线程问题(否则我的摇摆应用程序将无法工作)与网络相结合。如果我不关闭套接字,我将无法正常继续我的程序(或者至少,我的代码现在看起来如此)你能帮我吗?非常感谢您的帮助和想法。最好的,安德里亚

4

0 回答 0