Java TCP 客户端/服务器套接字

我正在研究一个将使用套接字创建 TCP 服务器和客户端的问题。对于客户端代码,我的目标是反复提示用户输入句子S,将句子S发送到服务器,接收服务器的响应,并显示接收到的消息和以毫秒表示的往返时间。在服务器上,我的目标是创建一个 TCP 服务器套接字,等待客户端连接,接收消息,用客户端的 IP 地址和端口号显示它,将消息大写,显示消息,然后回显“大写”的消息。


我正在尝试使用 while (!(input.equals("done"){ ...do something },但是,无论我做什么都会陷入无限循环。我希望它是我忽略的简单东西,但是我没看到。


TCPServer.java


import java.net.*;

import java.io.*;


public class myFirstTCPServer {

    public static void main(String[] args) throws IOException {


        int servPort = 4999;

        ServerSocket Sy = new ServerSocket(servPort);

        Socket servSocket = Sy.accept();


        InputStreamReader in = new InputStreamReader(servSocket.getInputStream());

        BufferedReader bf = new BufferedReader(in);

        String str = bf.readLine();


        while (!(str.equals("done"))){


            System.out.println("client connected");



            InetAddress address = InetAddress.getLocalHost();

            String ip = address.getHostAddress();

            System.out.println("IP: " + ip);

            System.out.println("Port: " + servPort);


            System.out.println("Message from client: " + str.toUpperCase());


            PrintWriter pr = new PrintWriter(servSocket.getOutputStream());

            pr.println(str);

            pr.flush();

        }

        servSocket.close();

    }

}

TCPClient.java


import java.net.*;

import java.io.*;

import java.util.Scanner;


public class myFirstTCPClient {

    public static void main(String[] args) throws IOException {

        String S;

        Scanner input = new Scanner(System.in);

        System.out.println("Enter a sentence");

        S = input.nextLine();

        Socket clntSocket = new Socket(InetAddress.getLocalHost(), 4999);


        while (!(S.equals("done"))){

            double sent = System.nanoTime();

            PrintWriter pr = new PrintWriter(clntSocket.getOutputStream());

            pr.println(S);

            pr.flush();


           

        }

        clntSocket.close();

    }

}


慕码人2483693
浏览 104回答 1
1回答

幕布斯7119047

您需要将阅读器移入 while 循环。因为这是服务器等待读取客户端输入的地方。    public class myFirstTCPServer {    public static void main(String[] args) throws IOException {        int servPort = 4999;        ServerSocket Sy = new ServerSocket(servPort);        Socket servSocket = Sy.accept();        System.out.println("client connected");        InputStreamReader in = new InputStreamReader(servSocket.getInputStream());        BufferedReader bf = new BufferedReader(in);        String str ="";        while (true)){            str = bf.readLine();            if(str.equals("done")) break;            InetAddress address = servSocket.getInetAddress();            String ip = address.getHostAddress();            System.out.println("IP: " + ip);            System.out.println("Port: " + servPort);            System.out.println("Message from client: " + str);            PrintWriter pr = new PrintWriter(servSocket.getOutputStream());            pr.println(str.toUpperCase());            pr.flush();        }        servSocket.close();    }    }  然后更改客户端:public class myFirstTCPClient {    public static void main(String[] args) throws IOException {        String S="";        Scanner input = new Scanner(System.in);        // you need to provide your server ip/domain        // InetAddress.getLocalHost() , still works but only works when         // your client is in the same machine.         Socket clntSocket = new Socket("127.0.0.1", 4999);        while (!(S.equals("done"))){            System.out.println("Enter a sentence");            S = input.nextLine();            double sent = System.nanoTime();            PrintWriter pr = new PrintWriter(clntSocket.getOutputStream());            pr.println(S);            pr.flush();            InputStreamReader in = new InputStreamReader(clntSocket.getInputStream());            BufferedReader bf = new BufferedReader(in);            String str = bf.readLine();            System.out.println("Message from server: " + str);            double received = System.nanoTime();            double total = received - sent;            System.out.println("Round Trip Time: " + (total/1000000.0));        }        clntSocket.close();    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java