【发布时间】:2015-09-22 10:31:20
【问题描述】:
我真的看不出这个错误在哪里。
我已经为 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());
}
}
任何建议将不胜感激。
谢谢
【问题讨论】:
-
您是否在每个 keyPressed 事件结束时关闭连接?由于您每次都通过相同的主机名和端口号使用 Socket 打开一个新连接,因此您应该确保关闭连接。
-
嗨马尔辛。我想我不是……与套接字/网络连接有关的一切都在上面的代码块中。不过,我现在可以正常工作了。我设置程序的方式,每次按下键时都会连接(我认为),所以我应该在按下每个键后关闭 I/O 流和套接字吗?我在想我可以在一个“finally”块中关闭所有三个。
-
尝试将
echoSocket.close()放在try块的末尾。 -
在这里搜索 Java + Socket + EventDispatchThread (e.i. EDT),从 Swing 中的 Concurency 开始
标签: java swing sockets jtextarea keylistener