2016-04-21 37 views
-2

我正在学习一些Java套接字编程,并设法在服务器和客户端之间建立我的第一个连接。这引发了我的好奇心:如果不是“连接”和“消息接收”消息而是我做了一种“聊天室”类型的事情,而服务器和客户端输入是相互打印的,会发生什么?所以我试着这样做。关于Java套接字和打印流的好奇心

现在,我知道这是没有办法的办法聊天室创建(我可能会需要线程和诸如此类的东西),但我很好奇,为什么这不工作:

服务器:

public void run() throws Exception 
{ 
    boolean isChatting = true; 
    Socket clientSocket = new Socket("localhost", 444); 

    PrintStream ps = new PrintStream(clientSocket.getOutputStream()); 
    ps.println("Connected."); 

    BufferedReader bfr = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
    BufferedReader bfrClient = new BufferedReader(new InputStreamReader(System.in)); 

    String serverMessage = bfr.readLine(); 
    String clientMessage; 

    System.out.println("Server: "+serverMessage); 

    while (isChatting) 
    { 
     clientMessage = bfrClient.readLine(); 
     ps.println(clientMessage); 

     if (clientMessage.toUpperCase().equals("EXIT")) 
     { 
      isChatting = false; 
     } 
    } 

    bfr.close(); 
    bfrClient.close(); 
} 

客户:

public void run() throws Exception 
{ 
    boolean isChatting = true; 
    ServerSocket server = new ServerSocket(444); //Port 
    Socket sSocket = server.accept(); 
    PrintStream ps = new PrintStream(sSocket.getOutputStream()); 

    BufferedReader bfr = new BufferedReader(new InputStreamReader(sSocket.getInputStream())); 
    BufferedReader bfrPersonal = new BufferedReader(new InputStreamReader(System.in)); 

    String clientMessage = bfr.readLine(); 
    String messageToSend; 
    System.out.println("Client: "+clientMessage); 

    if (clientMessage != null) 
    { 
     ps.println("Connected."); 
    } 

    while (isChatting) 
    { 
     messageToSend = bfrPersonal.readLine(); 
     ps.println(messageToSend); 

     if (messageToSend.toUpperCase().equals("EXIT")) 
     { 
      isChatting = false; 
     } 
    } 

    bfr.close(); 
    bfrPersonal.close(); 
} 

谢谢您的时间! :)

+0

“这没用”?呃...你有例外吗?哪一个在哪里?学习在其他事情之前进行调试 –

+0

双方都不能发送消息,直到消息从对方显示出来为止。这是一个僵局。如果你使用阻塞套接字,你*绝对*必须使用线程来创建一个聊天程序。 –

+0

@DenysSéguret我该如何调试一些从字面上什么都不做的事情?该程序只是坐在那里等待大声笑... –

回答

-1

如果您想创建聊天系统,最简单的方法是在服务器上创建两个线程,在客户端创建两个线程。

  • 第一个线程处理用户的输入并发送它。

  • 第二个线程处理来自其他聊天系统的输入并进行打印。

+0

你不需要两条线程来处理这个问题;你只需要一个。 – AlBlue