使套接字等待来自JTextArea的输入

时间:2013-12-26 19:24:39

标签: java sockets network-programming

我正在尝试更多地了解网络,套接字,udp等。

// main method: 

Socket clientSocket = new Socket("localhost", 10007);

PrintWriter clientSocketOutputStream = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader clientSocketInputStream = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

Scanner userInputReader = new Scanner(System.in);
String providedInput;

while ((providedInput = userInputReader.nextLine()) != null) {
    clientSocketOutputStream.println(providedInput);
    displayOnConsole("You have provided text: " + providedInput);
    String responseFromTheServer = clientSocketInputStream.readLine();
    System.out.println("Server has responded: " + responseFromTheServer);
    System.out.println(waitingForInputText);
}

// rest of the code... 

所以这个小代码我运作得很好。 (我有一个在localhost上运行良好的ServerSocket)。但是现在我试图通过GUI而不是命令行来做到这一点。

我有一个简单的JTextArea和一个JButton。我被困在:

while ((providedInput = userInputReader.nextLine()) != null) 

每次点击Jbutton并从JTextArea打印文本时,如何调用clientSocketOutputStream?

为了确保套接字正在等待,我应该放一个死的while(true)循环吗?有些东西告诉我必须有另一种方式。

1 个答案:

答案 0 :(得分:1)

只需在文本区域放置一个侦听器,以检测内容何时更改,然后根据所做的更改将任何您喜欢的内容发送到输出流。

一般情况下,文本区域不能很好地映射到这一点,但是作为可以在任何地方编辑的文本区域,您可能最好有一个只读文本区域来显示历史记录 - 然后有一个文本输入框(或一个较小的文本区域)和一个按钮,您按下该按钮可以在屏幕上的较小框中发送所有内容,将发送的文本附加到历史记录的末尾,然后擦除较小的框。

您还可以在按键上添加事件(例如返回键)以触发发送和移动到历史记录过程。