Java中的Synchronizend套接字消息

时间:2014-06-06 17:05:02

标签: java multithreading sockets

我是Sockets的新用户,并且我已经按照教程编写了 TCP 客户端,这基本上是这样的:

public boolean send(String message) {

    if(out != null && !out.checkError()) {
        out.println(message);
        out.flush();
        return true;
    } else {
        return false;
    }
}

@Override
public void run() {
    socket = new Socket(SERVER_IP, SERVER_PORT);

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

    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    while (mRun && (response = in.readLine()) != null && socket.isConnected()) {
        Message message = Message.obtain();

        if (message != null) {
            message.obj = response;
            mHandler.sendMessage(message);
        }
    }
}

因此,我从主Thread使用TCPClient#send(String)向服务器发送消息,但它会使用mHandler.sendMessage(Message)异步回复。

我想知道,如果为了同步发送消息(在发送下一个消息之前等待服务器响应),我TCPClient的架构应该是不同的(我也是{{1}的新架构}}和InputStream这就是为什么我感到困惑)或者这个客户端是否合适,我必须自己实现同步逻辑(使用回调标志)。

PS:我问这个问题是因为所有套接字教程都与我发布的那个有相同的骨架,但是,它们都不应该等待服务器响应要求再次写作,作为一项要求。

0 个答案:

没有答案