我无法真正看出错误在哪里。
我为textAreaTop组件设置了KeyListener,因此每次按下一个键时,都会向服务器发送一个字符串,然后将其回送到teaxtAreaBottom组件。我知道stdIn尚未使用。
当按下第一个键时,会建立连接,但是当按下第二个键时,我会收到以下错误:无法获得与localhost连接的I / O.此外,textAreaBottom组件不会附加任何内容。
//客户端
@Override
public void keyPressed(KeyEvent e) {
String hostName = "localhost";
int portNumber = 4000;
try (Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(echoSocket.getOutputStream(),
true);
BufferedReader in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in))) {
String userInput = textAreaTop.getText();
out.println(userInput);
textAreaBottom.setText(null);
textAreaBottom.setText(in.readLine());
} catch (UnknownHostException ex) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException ex) {
System.err.println("Couldn't get I/O for the connection to "
+ hostName);
System.exit(1);
}
}
//服务器
public static void main(String[] args) throws IOException {
int portNumber = 4000;
try {
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
System.out.println("connection accepted");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),
true);
BufferedReader in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
{
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
}
}
} catch (IOException e) {
System.out
.println("Exception caught when trying to listen on port "
+ portNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
}
非常感谢任何建议。
由于
答案 0 :(得分:1)
问题在于两个小缺陷:
您应该实施keyReleased()
而不是keyPressed()
,因为在调用textAreaTop
后keyPressed()
中的文字正在更新。因此,当调用keyReleased()
方法时,textAreaTop
包含您输入的最新文本。
每按一次键,都不应创建Socket
个对象。您应该定义Socket
以及对Streams
(以前的keyPressed)匿名类和方法的输入/输出keyReleased
外部的引用。因此,每次按一个键时,唯一要做的工作就是将文本从textAreaTop
和out.println(text)
传送到服务器。在这种情况下,我测试了代码并且它正常工作。
祝你好运。