2016-03-04 23 views
-2

我是新来的Java编程,甚至新到Java网络规划,所以我相信这个问题将是一个简单的。我的程序基于提交按钮,将学生ID提交给服务器。我的Java服务器/客户端程序只会工作,每次我第三次运行

前两次我运行它会建立与服务器的连接,然后一切都会崩溃,它永远不会交换串的程序。

但是,每次我第三次运行它,它会很好地工作和交流的字符串作为设计的。

客户:

String currentButton = e.getActionCommand(); 
    if(currentButton == "submit"){ 
     try{ 
      Socket server = new Socket("Localhost",1234); 
      InetAddress address=InetAddress.getLocalHost(); 

      System.out.println("Connected to "+server.getInetAddress()); 
      System.out.println("Connected to "+address); 

      BufferedReader br = new BufferedReader(new InputStreamReader(server.getInputStream())); 

      PrintWriter pw = new PrintWriter(server.getOutputStream(), true); 

      pw.println(student); 

      while ((student = br.readLine()) != null) { 
       System.out.println(student); 
       pw.println("bye"); 

       if (student.equals("bye")) 
       break; 
      } 
      br.close(); 
      pw.close(); 
      server.close(); 
     } catch (IOException ex){ 
      //ignore exception 
     } 
    } 

服务器

class NETCW1S { 
public static void main(String[] args) throws IOException { 
    String student; 
    ServerSocket serverSock = null; 
    InetAddress address=InetAddress.getLocalHost(); 
    try{ 
     serverSock = new ServerSocket(1234); 
     System.out.println("Waiting for client connection"); 
    } catch (IOException e) { 
     System.err.println("Could not listen on port: 1234"); 
     System.exit(1); 
    } 
    Socket clientSock = null; 
    try{ 
     clientSock = serverSock.accept(); 
    } catch (IOException e) { 
     System.err.println("Accept Failed"); 
     System.exit(1); 
    } 
    while (true) { 
     System.out.println("Connected to "+address); 
     System.out.println("Waiting for client..."); 
     Socket client = serverSock.accept(); 

     System.out.println("Client from "+client.getInetAddress()+" connected."); 

     Socket fromClientSocket = serverSock.accept(); 
     PrintWriter pw = new PrintWriter(fromClientSocket.getOutputStream(), true); 

     BufferedReader br = new BufferedReader(new InputStreamReader(fromClientSocket.getInputStream())); 

     while ((student = br.readLine()) != null) { 
      System.out.println("The message: " + student); 

      if (student.equals("bye")) { 
       pw.println("bye"); 
       break; 
      } else { 
       student = "Server returns " + student; 
       pw.println(student); 
      } 
     } 
     pw.close(); 
     br.close(); 

     fromClientSocket.close(); 
    } 
} 

提前非常感谢!

+0

您try子句中执行接近是一个坏主意!如果之前抛出异常,则不会关闭流/连接,这也可能解释您的问题。同样糟糕的,如果不是更糟的是*隐藏例外*!不要这样做,即使你不期待他们! – Neil

+0

“一切都会崩溃”是什么意思? –

+0

喜尼尔,如果我移动试结束的外,该计划不会编译生成错误“NETCW1.java:70:错误:无法找到符号 \t \t br.close();” – George

回答

0

服务器应该只有一个接受()调用,内循环。客户端需要在某个时刻进行connect()调用 - 现在它似乎没有与客户交谈。

相关问题