调试套接字通信程序

时间:2013-02-25 12:03:55

标签: java network-programming

我有2个类(ClientServer)用于在我的应用程序中实现简单的通信。我的代码如下所示:

服务器

public class Server {
    public static void main(String[] ar) {
        int port = 1025; // just a random port. make sure you enter something between 1025 and 65535.
        try {
            ServerSocket ss = new ServerSocket(port); // create a server socket and bind it to the above port number.
            System.out.println("Waiting for a client...");
            Socket socket = ss.accept();
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(
                    System.in));
            System.out.println("enter meter id ");
            String line = null;

            while (true) {
                line = in.readUTF(); // wait for the client to send a line of text.
                System.out.println("client send me this id number " + line);
                line = keyboard.readLine();
                out.writeUTF(line);
                out.flush();
                //line = in.readUTF(); 
                System.out.println("Waiting for the next line...");
                System.out.println();
            }
        } catch (Exception x) {
            x.printStackTrace();
        }
    }
}

客户端:

public class Client {
    public static void main(String[] ar) {
        int serverPort = 1025;
        String address = "localhost";
        try {
            InetAddress ipAddress = InetAddress.getByName(address); // create an object that represents the above IP address.
            System.out.println(" IP address " + address + " and port "
                    + serverPort);
            Socket socket = new Socket(ipAddress, serverPort); // create a socket with the server's IP address and server's port.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);
            // Create a stream to read from the keyboard.
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(
                    System.in));
            String line = null;
            System.out.println("ClientConnected.");
            System.out.println("enter meter id");

            while (true) {
                line = keyboard.readLine(); // wait for the user to type in something and press enter.
                System.out.println("Sending this number to the server...");
                out.writeUTF(line); // send the above line to the server.
                out.flush(); // flush the stream to ensure that the data reaches the other end.
                line = in.readUTF(); // wait for the server to send a line of text.
                System.out
                        .println("The server was very polite. It sent me this : "
                                + line);
                System.out.println();
            }
        }
        catch (Exception x) {
            x.printStackTrace();
        }
    }
}

我的问题是,在测试程序时,我确实在客户端和服务器之间进行了通信,但是在调试时,out.flush行中的Server.java行有一个断点,它没有进入预定目的地。此预期目的地是line = in.readUTF();的行Client.java。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

最好在您的套接字上 OutputStream之前打开InputStream s ,如question中所述。

question也澄清了这一点。

答案 1 :(得分:0)

我怀疑这里是你的客户端和服务器在两个不同的JVM进程中运行而java调试器不能同时调试两个JVM。