Android ServerSocket不向客户端发送数据(客户端c#,服务器java)

时间:2015-11-20 22:47:06

标签: android sockets server

我正在玩Android上的ServerSocket作为服务器部分。我不明白它的表现如何。以下是我测试的内容:

A1。在Android上实例化ServerSocket

A2。 ServerSocket向客户端发送“hello”

A3。客户端可以读取“hello”并可以回复ServerSocket

A4。 Android上的ServerSocket接收来自客户端的答案

=>这完美地运作

现在我希望客户端成为第一个向ServerSocket发送消息的人:

B1。在Android上实例化ServerSocket

B2。客户端将数据发送到ServerSocket

B3。 ServerSocket从客户端

接收数据

B4。不可能回复客户

这可能是正常的行为吗?

由于

这是源代码

public void startServer()
{
    log("startServer");
    UUID uuid = UUID.randomUUID();
    final String sessionId = uuid.toString().replace("-", "");
    log("Session ID = " + sessionId);

    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            while (stopServer == false) {
                ServerSocket serverSocket = null;
                try {
                    serverSocket = new ServerSocket(7777);
                    final Socket socket = serverSocket.accept();

                    InputStream inputStream = socket.getInputStream();
                    String strFromClient = "";
                    int i = 0;
                    while (i != -1) {
                        try {
                            i = inputStream.read();
                            if (i != -1)
                                strFromClient += (char) i;
                        }catch (Exception e){
                            break;
                        }
                    }
                    inputStream.close();

                    OutputStream outputStream = socket.getOutputStream();
                    String strToClient = "test";
                    byte[] cArray = strToClient.getBytes();
                    outputStream.write(cArray);
                    outputStream.flush();
                    outputStream.close();

                    socket.close();
                    serverSocket.close();

                    log("end server");
                } catch (Exception e) {
                    //log(e.toString());
                }
            }
        }
    });
    t.start();
}

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案!错误是因为C#客户端没有发送“-1”值(这只是在关闭流或类似的东西后触发)。

解决方案在Android端,现在从客户端读取数据如下:

                InputStream inputStream = socket.getInputStream();
                String strFromClient = "";
                int available = inputStream.available();
                Log.d("intelsms", "available from client:" + available);
                for (int i=0;i<available;i++){
                    int c = inputStream.read();
                    strFromClient+=(char)c;
                }

我使用“available()”方法来了解可从客户端读取的字节数。

OUF!