【问题标题】:Android ServerSocket not sending data to client (client c#, server java)Android ServerSocket不向客户端发送数据(客户端c#,服务器java)
【发布时间】:2016-02-23 13:39:25
【问题描述】:

我正在使用 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();
}

【问题讨论】:

  • 客户端是 C# 中的 NetworkStream,这可能是问题所在(在调试模式下,ServerSockets 可以很好地发送数据)?
  • 那可能是什么问题?
  • 我认为SocketServer一定是第一个发起通信的。
  • 你为什么这么认为?你的客户端代码在哪里?

标签: android sockets server


【解决方案1】:

好的,我找到了解决方案!该错误是因为 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()”方法来了解有多少字节可用于从客户端读取。

哎呀!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2014-04-08
    • 2016-07-21
    • 2015-02-10
    • 2015-02-17
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    相关资源
    最近更新 更多