我無法真正看到錯誤在哪裏。試圖從JTextArea中回顯文本
我爲textAreaTop組件設置了一個KeyListener,因此每次按下某個鍵時都會向服務器發送一個字符串,並將其返回給teaxtAreaBottom組件。我知道stdIn尚未使用。
當按下第一個鍵,建立連接,而當第二鍵被按下我收到以下錯誤:無法獲取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事件結束時關閉連接? 因爲每次你打開一個新的連接與插座在相同的主機名和端口號,你應該確保關閉連接。 – Marcin
嗨Marcin。我想我不是......所有與套接字/網絡連接有關的事情都在上面的代碼塊中。儘管我現在有工作。 我已經設置了程序的方式,每一個按鍵時(我認爲)連接,所以我應該關閉I/O流和插座按下每個按鍵後? 我想我可以關閉所有三個「最後」塊。 – user3742439
嘗試將'echoSocket.close()'放在try塊的末尾。這裏關於Java +插座+ EventDispatchThread(E.I. EDT) – Marcin