【问题标题】:server/client chat socket in javajava中的服务器/客户端聊天套接字
【发布时间】:2013-09-17 22:07:59
【问题描述】:

我有一个服务器/客户端套接字连接,每一方都可以向另一方发送消息。必须开始聊天的客户。当双方(服务器和客户端)之一发送“退出”消息时,我想关闭连接。 这是我的代码:

import java.io.*; 
import java.net.*; 
class TCPClient { 

    public static void main(String argv[]) throws Exception 
    { 
        String sentence; 
        String modifiedSentence; 
while(true){
        BufferedReader inFromUser = 
          new BufferedReader(new InputStreamReader(System.in)); 

        Socket clientSocket = new Socket("localhost", 6789); 

        DataOutputStream outToServer = 
          new DataOutputStream(clientSocket.getOutputStream());


        BufferedReader inFromServer =
          new BufferedReader(new
          InputStreamReader(clientSocket.getInputStream()));

        sentence = inFromUser.readLine();

        outToServer.writeBytes(sentence + '\n');

        modifiedSentence = inFromServer.readLine();

        System.out.println("FROM SERVER: " + modifiedSentence);

        if(modifiedSentence.equals("quit\n")) clientSocket.close();

}
    }
}


import java.io.*; 
import java.net.*; 

class TCPServer { 

  public static void main(String argv[]) throws Exception 
    { 
      String clientSentence; 
      String sentence; 

    BufferedReader inFromUser = 
          new BufferedReader(new InputStreamReader(System.in));

      ServerSocket welcomeSocket = new ServerSocket(6789); 

      while(true) { 

            Socket connectionSocket = welcomeSocket.accept(); 

           BufferedReader inFromClient = 
              new BufferedReader(new
              InputStreamReader(connectionSocket.getInputStream()));




           DataOutputStream outToClient =
             new DataOutputStream(connectionSocket.getOutputStream());

           clientSentence = inFromClient.readLine();
System.out.println("FROM CLIENT: " + clientSentence);

           //capitalizedSentence = clientSentence.toUpperCase() + '\n';
           sentence = inFromUser.readLine();
           outToClient.writeBytes(sentence);
       }
   }
}

有什么帮助吗? :)

【问题讨论】:

  • 不要混淆文本和二进制。如果要使用文本,请不要使用 DataOutputStream 或 DataInputStream
  • readline 将删除 \n 因此在字符串中检查它没有意义,它不可能存在。
  • 您还必须检查 readLine() 的结果是否为 null,如果是则关闭套接字。我在这里没有看到真正的问题。

标签: java sockets client-server chat


【解决方案1】:

你已经写了一行。为“退出”写另一个,并在读取和关闭()时检查此字符串。

如果您不了解程序在做什么,请使用调试器,这就是它的用途。

【讨论】:

  • 或者一开始就不要这样写。我打算放一个笑脸,但这实际上不是开玩笑。
  • 同意。当你想关闭连接时,你可以关闭()。
猜你喜欢
  • 2012-12-15
  • 2020-10-10
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2016-08-03
  • 2016-11-06
相关资源
最近更新 更多