当套接字在Java中读取输入时,while循环失败

肖恩

所以我在从客户端读取输入时遇到问题。每当我在服务器类中使用if语句而没有while语句时,它都可以正常工作。有人可以指出为什么这可能会失败吗?

服务器类:

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

public class Server {

    public static void main(String[] args) throws Exception
    {
        Server myServer = new Server();
        myServer.run();
    }

    public void run() throws Exception
    {

        //Initializes the port the serverSocket will be on
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("The Server is waiting for a client on port 9999");
        //Accepts the connection for the client socket
        Socket socket = serverSocket.accept();

        InputStreamReader ir = new InputStreamReader(socket.getInputStream());
        BufferedReader br = new BufferedReader(ir);
        String message = br.readLine();
        //Confirms that the message was received
        System.out.println(message);

    //When this while is here.  The match fails and it goes to the else statement.
    //Without the while statement it will work and print "Received our hello message." 
    //when the client says HELLO.

     while(message != null)
     {
            if(message.equals("HELLO"))
            {
                PrintStream ps = new PrintStream(socket.getOutputStream());
                ps.println("Received our hello message.");
            }
            else
            {
                PrintStream ps = new PrintStream(socket.getOutputStream());
                ps.println("Did not receive your hello message");
            }
        }
    }
}

客户类别:

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

public class Client {

    public static void main(String[] args) throws Exception
    {
        Client myClient = new Client();
        myClient.run();
    }

    public void run() throws Exception
    {
        Socket clientSocket = new Socket("localhost", 9999);
        //Sends message to the server
        PrintStream ps = new PrintStream(clientSocket.getOutputStream());
        Scanner scan = new Scanner(System.in);
        String cMessage = scan.nextLine();
        ps.println(cMessage);
        //Reads and displays response from server
        InputStreamReader ir = new InputStreamReader(clientSocket.getInputStream());
        BufferedReader br = new BufferedReader(ir);
        String message = br.readLine();
        System.out.println(message);        
    }

}
麦克·凯文

您只在服务器端循环,而您却忘了在客户端循环,我为您做了快速修复,还帮助您关闭了连接。

服务器.java

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

public class Server {

    public static void main(String[] args) throws Exception
    {
        Server myServer = new Server();
        myServer.run();
    }

    public void run() throws Exception
    {

        //Initializes the port the serverSocket will be on
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("The Server is waiting for a client on port 9999");
        //Accepts the connection for the client socket
        Socket socket = serverSocket.accept();

        InputStreamReader ir = new InputStreamReader(socket.getInputStream());
        BufferedReader br = new BufferedReader(ir);
        String message;
        //= br.readLine();
        //Confirms that the message was received

    //When this while is here.  The match fails and it goes to the else statement.
    //Without the while statement it will work and print "Received our hello message." 
    //when the client says HELLO.
        PrintStream ps = new PrintStream(socket.getOutputStream());
        while((message =br.readLine())!=null)
         {
             System.out.println(message);
                if(message.equals("HELLO"))
                {

                    ps.println("Received our hello message.");
                }
                if(message.equals("END"))
                {
                    ps.println("Client ended the connection");
                    break;
                }
                else
                {

                    ps.println("Did not receive your hello message");
                }
        }
        ps.close();
        br.close();
        ir.close();
        serverSocket.close();
    }
}

客户端.java

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

public class Client {

    public static void main(String[] args) throws Exception
    {
        Client myClient = new Client();
        myClient.run();

    }

    public void run() throws Exception
    {
        Socket clientSocket = new Socket("localhost", 9999);
        //Sends message to the server
        PrintStream ps = new PrintStream(clientSocket.getOutputStream());
        Scanner scan = new Scanner(System.in);
        String cMessage ="";
        InputStreamReader ir = new InputStreamReader(clientSocket.getInputStream());
        BufferedReader br = new BufferedReader(ir);
        while(!(cMessage.trim().equals("END"))){
        cMessage = scan.nextLine();
        ps.println(cMessage);
        //Reads and displays response from server
        String message = br.readLine().trim();
        System.out.println(message);
        }
        br.close();
        ir.close();
        scan.close();
        ps.close();
        clientSocket.close();
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

程序挂在while循环中,用于从套接字读取输入流:Java

来自分类Dev

从线程中的Java TCP套接字读取

来自分类Dev

Java套接字失败

来自分类Dev

读取套接字的输入流

来自分类Dev

如何使用线程JAVA从套接字读取输入

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

Java线程正在侦听套接字,WHILE循环未等待

来自分类Dev

蓝牙套接字:读取失败,套接字可能关闭或超时

来自分类Dev

如何使用Java中的套接字快速读取数据?

来自分类Dev

蓝牙连接失败“ java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1”

来自分类Dev

蓝牙连接失败。java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1

来自分类Dev

蓝牙连接失败。java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1

来自分类Dev

从文件读取输入时,不是用Java读取文件中的所有行吗?

来自分类Dev

从Java套接字读取比Python慢

来自分类Dev

读取SSL套接字Java的奇怪行为

来自分类Dev

Java 套接字读取后立即写入

来自分类Dev

Java套接字多次写入和读取

来自分类Dev

输入时无休止的Java循环

来自分类Dev

输入时无休止的Java循环

来自分类Dev

从Android中的套接字读取数据

来自分类Dev

从LISP中的套接字读取C ++结构

来自分类Dev

从Lisp中的套接字流读取行

来自分类Dev

如何从Android中的套接字读取数据

来自分类Dev

从LISP中的套接字读取C ++结构

来自分类Dev

Java:套接字未获取输入

来自分类Dev

再次:读取失败,套接字可能关闭或超时

来自分类Dev

从数据套接字读取时,WeeChat解密失败

来自分类Dev

SSH问题-从套接字读取失败:对等连接重置

Related 相关文章

  1. 1

    程序挂在while循环中,用于从套接字读取输入流:Java

  2. 2

    从线程中的Java TCP套接字读取

  3. 3

    Java套接字失败

  4. 4

    读取套接字的输入流

  5. 5

    如何使用线程JAVA从套接字读取输入

  6. 6

    将输入从C套接字客户端读取到Java套接字服务器

  7. 7

    将输入从C套接字客户端读取到Java套接字服务器

  8. 8

    Java线程正在侦听套接字,WHILE循环未等待

  9. 9

    蓝牙套接字:读取失败,套接字可能关闭或超时

  10. 10

    如何使用Java中的套接字快速读取数据?

  11. 11

    蓝牙连接失败“ java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1”

  12. 12

    蓝牙连接失败。java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1

  13. 13

    蓝牙连接失败。java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1

  14. 14

    从文件读取输入时,不是用Java读取文件中的所有行吗?

  15. 15

    从Java套接字读取比Python慢

  16. 16

    读取SSL套接字Java的奇怪行为

  17. 17

    Java 套接字读取后立即写入

  18. 18

    Java套接字多次写入和读取

  19. 19

    输入时无休止的Java循环

  20. 20

    输入时无休止的Java循环

  21. 21

    从Android中的套接字读取数据

  22. 22

    从LISP中的套接字读取C ++结构

  23. 23

    从Lisp中的套接字流读取行

  24. 24

    如何从Android中的套接字读取数据

  25. 25

    从LISP中的套接字读取C ++结构

  26. 26

    Java:套接字未获取输入

  27. 27

    再次:读取失败,套接字可能关闭或超时

  28. 28

    从数据套接字读取时,WeeChat解密失败

  29. 29

    SSH问题-从套接字读取失败:对等连接重置

热门标签

归档