从线程中的Java TCP套接字读取

时间:2014-02-01 11:53:18

标签: java multithreading sockets tcp runnable

我有这个TCP套接字(我只发布了相关部分并删除了异常抛出):

static Socket clientSocket;
static BufferedReader inFromServer;

连接部分(我从另一个类调用它):

static Socket clientSocket = new Socket(ip, port);
static BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

为了接收文字,我有一个可以运行的线程,我称之为:

public static void StartRecievingText(){
    TCPScanner.setReader(inFromServer);
    Thread t1 = new Thread(new TCPScanner());
    t1.start();
}

主题:

public class TCPScanner implements Runnable {

static BufferedReader inFromServer;

public static void setReader(BufferedReader reader){
    inFromServer = reader;
}

public void run() {
    while (true) {
            String temp = inFromServer.readLine();
            System.out.println(temp);
        }
    }
}

线程运行到inFromServer.readline()部分,看起来什么也没收到。

这是我第一次使用线程并且......第二次使用tcp连接,所以我不知道我做错了什么。

感谢您的帮助(抱歉拼写错误......仍在学习英语)

1 个答案:

答案 0 :(得分:1)

您的客户端正在读取行,但您没有发送行,因此客户端会永远阻止等待永不到达的行终止符。为发送的内容添加换行符,或者使用不需要它的其他读取方法。

您的代码还有其他问题。这些数据项都不应该是静态的。您的读循环应该测试readLine()的结果为null,并关闭套接字并退出,如果为true。