Android Socket不发送多个数据包

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

标签: android sockets server client

我有一个问题。

我从连接的Socket中获取输出流

outStream = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

我将数据发送到服务器

private void send(final Object data){
    new Thread(new Runnable() {
        @Override
        public void run() {
            client.Send(data);
        }
    }).start();
}

在另一个类中调用“client.send(Object data)”内容。

    public void Send(Object data) {
    try
    {
        outStream.print(data);
        outStream.flush();
    }
    catch (Exception ex)
    {
        Disconnect();
    }
}

如果我点击按钮发送数据我正确地从客户端收到数据,但是如果我再点击该按钮,服务器就不会收到数据......

服务器(我处理数据的地方)

    Private Sub ReceiveCallback(ar As IAsyncResult)
    Dim socket As Socket = DirectCast(ar.AsyncState, Socket)
    Dim received As Integer = socket.EndReceive(ar)
    Dim dataBuf As Byte() = New Byte(received - 1) {}
    Buffer.BlockCopy(_buffer, 0, dataBuf, 0, dataBuf.Length)

    If dataBuf.Length = 0 Then
        Disconnect(socket)
    Else
        OnDataReceived(socket, dataBuf)
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

你得到某种异常并忽略它:

  1. 收到异常时打印堆栈跟踪。

  2. 不要在网络上使用PrintWriter,因为它会吞下异常。使用BufferedWriter

  3. 不要抓住Exception IOException或其他更具体的例外情况。

  4. 我也想知道你为什么要创建一个新线程来发送。在大多数情况下,它不应该是必要的。