我有一个问题。
我从连接的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
答案 0 :(得分:0)
你得到某种异常并忽略它:
收到异常时打印堆栈跟踪。
不要在网络上使用PrintWriter
,因为它会吞下异常。使用BufferedWriter
。
不要抓住Exception
IOException
或其他更具体的例外情况。
我也想知道你为什么要创建一个新线程来发送。在大多数情况下,它不应该是必要的。