亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號