我的简单Android应用程序不会将数据发送到套接字

时间:2017-12-20 00:42:10

标签: android sockets client-server

我有一个简单的Android应用程序应该将一些数据发送到我已经通过套接字的服务器,具有给定的IP和端口号。

在我的onCreate()我连接到服务器。这部分有效:

// connect to the server
clientThread = new ClientThread();
thread = new Thread(clientThread);
thread.start();

但是sendMessage()没有向套接字发送任何消息,我的服务器上也没有收到任何消息。该功能甚至不显示日志消息,所以我不知道发生了什么。问题是什么?如何解决?

//TODO send data
                            clientThread.sendMessage(100);

这是套接字线程类:

class myApp extends Activity{
//....
ClientThread clientThread;
Thread thread;
//....

class ClientThread implements Runnable {

private Socket socket;
private BufferedReader input;

@Override
public void run() {
    InetAddress serverAddr = null;
    try {
        serverAddr = InetAddress.getByName(SERVER_IP);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    try {
        socket = new Socket(serverAddr, SERVERPORT);
        Log.i("Hello: Connected","Hello: Connected");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

void sendMessage(int data) {
    try {
        if (null != socket) {
            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),
                    true);
            out.println(data);
            Log.i("Hello Message sent","Hello sent: "+data+" to: "+ SERVER_IP+":"+SERVERPORT);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}
}

我的服务器端接收(Java服务器):

public void run() {
    System.out.println("Got a new user!");
    InputStream inp;

    try {
        /* Get Data From Client */
        inp = socket.getInputStream();
        int data= inp.read();
        System.out.println(address+" "+ data);

        if (data!=0) {
            scoreboard.b1.y+=1;
            if (scoreboard.b1.y==scoreboard.MaxValue) {
                System.out.println("HELLLOOOOOOO");
                scoreboard.updateValue();
            }
            scoreboard.repaint();
        }

    } catch (IOException e) {
        return;
    }
    String line;
}

2 个答案:

答案 0 :(得分:2)

out.println(data);之后,您应该致电out.flush();

你以错误的方式阅读数据,如果你想多次阅读,应该有缓冲表达式,例如this

答案 1 :(得分:0)

我在Android应用中使用的发件人选项(PrintWriter)发送了错误的值。我将其更改为DataOutputStream并且有效。

DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
out.write(steps);
out.flush();

同样在服务器上,我几乎忘记了while(true)循环来连续接收消息。现在一切正常!