Java socket 雙向通信

簡單的一個socket通信

//客戶機
package Client;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
    public static void main(String args[]){
        String host= "172.31.18.85";
        int port=65200;
        PrintWriter pw ;
        BufferedReader br;
        String CilentSay;
        String temp;
            try {
                Socket socket = new Socket(host,port);
                //狀態提示
                System.out.println("你已經成功鏈接服務端。。。");
                Scanner in = new Scanner(System.in);
                while(true){

                    //接受來自服務器的消息

                     br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                     temp =br.readLine();
                     System.out.print("  主服務器發來消息:");
                    System.out.println(temp);

                    //向服務起發送消息

                     pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
                     System.out.print("  向主服務器發消息:");
                        CilentSay=in.nextLine();

                        pw.println(CilentSay);

                        pw.flush();

                }

            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
}
//服務器
package Server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
            public static void main(String args[]){
                PrintWriter pw;
                String temp;
                String serverSay;
                BufferedReader br;

                try {
                    ServerSocket serversocket = new ServerSocket(65200);

                    System.out.println("服務器啓動了...");

                    Socket socket = serversocket.accept();

                    System.out.println("客戶機鏈接服務器");

                    Scanner in =new Scanner(System.in);

                    while(true){

                        //向客戶機發送消息
                         pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
                         System.out.print("  向客戶機發消息:");
                            serverSay=in.nextLine();
                            pw.println(serverSay);
                            pw.flush();



                        //接受來自客戶機的消息



                          br = new BufferedReader
                                    (new InputStreamReader(socket.getInputStream()));

                             temp = br.readLine();
                             System.out.print(socket.getInetAddress()+"  發來消息:");
                            System.out.println(temp);




                        }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
}

遇到的困惑

這個socket用了一晚上才寫出來,一直只能單向通訊,或者每次只能互發一條消息,最後我將我的發送消息的代碼
`while(in.hasNext()){
serverSay=in.nextLine();
pw.println(serverSay);
pw.flush();}
改 成

serverSay=in.nextLine();
                            pw.println(serverSay);
                            pw.flush();

去掉那個循環就能實現多次雙向通信,有知道的同學請評論一下,向你請教一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章