繁体   English   中英

对 Java 套接字和打印流的好奇心

[英]Curiosity about Java sockets and printstream

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

现在,我知道这不是创建聊天室的方式(我可能需要 Threads 之类的东西),但我很好奇为什么这不起作用:

服务器:

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();
}

感谢您的时间! :)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM