为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2022-12-21 10:52:04
我正在研究一个将使用套接字创建 TCP 服务器和客户端的问题。对于客户端代码,我的目标是反复提示用户输入句子S,将句子S发送到服务器,接收服务器的响应,并显示接收到的消息和以毫秒表示的往返时间。在服务器上,我的目标是创建一个 TCP 服务器套接字,等待客户端连接,接收消息,用客户端的 IP 地址和端口号显示它,将消息大写,显示消息,然后回显“大写”的消息。我正在尝试使用 while (!(input.equals("done"){ ...do something },但是,无论我做什么都会陷入无限循环。我希望它是我忽略的简单东西,但是我没看到。TCPServer.javaimport 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.javaimport 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();    }}
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您需要将阅读器移入 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();

    }

}


查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信