天天看點

socket.io java 點對點_java socket點對點以及點對面程式設計執行個體

和socket程式設計有關的幾個類:

InetAddress

Socket:用在用戶端

ServerSocket:用在伺服器端

一。點對點通信

伺服器端:

package server; import java.io.*; import java.net.*; public class Server { private int port; public Server(int port){    this.port=port;    start(); } //将從用戶端收到的資訊轉化為大寫的 public String process(String line){    return line.toUpperCase(); } public void start(){    try{      //根據端口建立套接字      ServerSocket myscoket=new ServerSocket(port);      //顯示連接配接資訊      System.out.println("伺服器啟動完成,監聽端口在"+port);      System.out.println("正在等待客戶連接配接.........");      //挂起等待客戶的請求      Socket connection=myscoket.accept();          //測試          System.out.println("客戶發來連接配接請求.........");      //擷取讀取用戶端的資料流      BufferedReader in=new BufferedReader(new InputStreamReader(connection.getInputStream()));      //擷取寫往用戶端的資料輸出流,true表示自動重新整理      PrintWriter out=new PrintWriter(connection.getOutputStream(),true);      //向客戶發送歡迎的資訊      out.println("您好,伺服器連接配接成功!");      out.println("輸入bye斷開與伺服器的連接配接");      boolean done=false;      while(!done){        //讀取用戶端的内容        String line=in.readLine();        if(line==null){          done=true;        }else{          //從伺服器端顯示用戶端發送的資訊          System.out.println("從用戶端來的内容"+line);          //資訊處理          String message=process(line);          //向用戶端發送資訊          out.println("從伺服器端口發送的資訊"+message);          if(line.trim().equals("BYE"))            done=true;        }      }      //關閉通信      connection.close();    }catch(Exception e){      System.out.println(e);    } } } package server; public class ServerDemo {       public static void main(String[] args) {      // TODO Auto-generated method stub if(args.length!=1){    System.out.println("運作方式:java Server ");    return; } try{    //獲得端口号    int port=Integer.parseInt(args[0]);    Server myserver=new Server(port); }catch(Exception e){    System.out.println(e); }    } }

用戶端:

package client; import java.io.*; import java.net.*; public class Client { private String host; private int port; public Client(String host,int port){    this.host=host;    this.port=port;    connect(); } public void connect(){    try{      Socket connection;      if(host.equals("localhost"))      {connection=new Socket(InetAddress.getLocalHost(),port);}      else       { connection=new Socket(InetAddress.getByName(host),port);}      //獲得從鍵盤輸入流      BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));      //獲得伺服器寫内容的資料流      PrintWriter out=new PrintWriter(connection.getOutputStream(),true);      //獲得接收伺服器發送内容的輸入流      BufferedReader in=new BufferedReader(new InputStreamReader(connection.getInputStream()));      //從伺服器獲得歡迎資訊      System.out.println("伺服器資訊:"+in.readLine());      System.out.println("伺服器資訊:"+in.readLine());      //提示使用者輸入      System.out.print("請輸入>");      boolean done=false;      while(!done){        //從鍵盤上讀取字元        String line=stdin.readLine();        //發送到服務端        out.println(line);        //如果讀到bye則結束循環        if(line.equalsIgnoreCase("bye"))          done=true;        //從伺服器讀取字元串        String info=in.readLine();        //顯示從伺服器發送來的資料        System.out.println("伺服器資訊:"+info);        //提示使用者輸入        if(!done)          System.out.print("請輸入>");      }      //關閉      connection.close();    }catch(SecurityException e){      System.out.println("連接配接伺服器出現安全問題!");    }catch(IOException e){      System.out.println("連接配接伺服器出現I/O錯誤!");    }    } } package client; public class ClientDemo {       public static void main(String[] args) {      // TODO Auto-generated method stub if(args.length!=2){    System.out.println("程式運作方式:java client ");    return; } String host=args[0]; try{    int port=Integer.parseInt(args[1]);    Client myserver=new Client(host,port); }catch(Exception e){    System.out.println(e); }    } }

二。點對面通信

服務端:

package server; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server extends ServerSocket { private int port; //private Socket connection; public Server(int port)throws IOException{    super(port);    this.port=port;    System.out.println("伺服器啟動完成,監聽端口在"+port);    System.out.println("正在等待客戶連接配接.....");    try{    while(true){      //挂起,直到客戶請求      Socket connection=accept();      //建立服務線程      new ServerThread(connection,port);    }    }catch(IOException e){      System.out.println(e);    }finally{      close();    } } } package server; import java.io.*; import java.net.*; public class ServerThread extends Thread{ private int port; private Socket connection; private BufferedReader in; private PrintWriter out; public ServerThread(Socket s,int port)throws IOException{    this.port=port;    this.connection=s;    //擷取讀取用戶端的資料流 in=new BufferedReader(new InputStreamReader(connection.getInputStream (),"gb2312"));    //擷取寫往用戶端的資料輸出流,true表示自動重新整理    out=new PrintWriter(connection.getOutputStream(),true);    //向客戶發送歡迎的資訊    out.println("您好,伺服器連接配接成功!");    out.println("輸入bye斷開與伺服器的連接配接");    //啟動線程    start(); } //将從用戶端收到的資訊轉化為大寫的 public String process(String line){    return line.toUpperCase(); } public void run(){    try{      boolean done=false;      while(!done){        String line=in.readLine();        if(line==null)          done=true;        else{                  if(line.trim().equals("bye"))            done=true;          System.out.println("從用戶端來的内容"+line);          String message=process(line);          out.println("從伺服器端口發出的内容"+message);        }      } System.out.println("bye bye!");      //關閉通信      connection.close();    }catch(Exception e){      System.out.println(e);    } } } package server; public class ServerDemo {       public static void main(String[] args) {      // TODO Auto-generated method stub if(args.length!=1){    System.out.println("運作方式:java Server ");    return; } try{    //獲得端口号    int port=Integer.parseInt(args[0]);    Server myserver=new Server(port); }catch(Exception e){    System.out.println(e); }    } }

用戶端:

package client; import java.io.*; import java.net.*; public class Client { private String host; private int port; public Client(String host,int port){    this.host=host;    this.port=port;    connect(); } public void connect(){    try{      Socket connection;      if(host.equals("localhost"))        connection=new Socket(InetAddress.getLocalHost(),port);      else       connection=new Socket(InetAddress.getByName(host),port);      //獲得從鍵盤輸入流      BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));      //獲得伺服器寫内容的資料流      PrintWriter out=new PrintWriter(connection.getOutputStream(),true);      //獲得接收伺服器發送内容的輸入流      BufferedReader in=new BufferedReader(new InputStreamReader(connection.getInputStream()));      //從伺服器獲得歡迎資訊      System.out.println("伺服器資訊:"+in.readLine());      System.out.println("伺服器資訊:"+in.readLine());      //提示使用者輸入      System.out.print("請輸入>");      boolean done=false;      while(!done){        //從鍵盤上讀取字元        String line=stdin.readLine();        //發送到服務端        out.println(line);        //如果讀到bye則結束循環        if(line.equalsIgnoreCase("bye"))          done=true;        //從伺服器讀取字元串        String info=in.readLine();        //顯示從伺服器發送來的資料        System.out.println("伺服器資訊:"+info);        //提示使用者輸入        if(!done)          System.out.print("請輸入>");      }      //關閉      connection.close();    }catch(SecurityException e){      System.out.println("連接配接伺服器出現安全問題!");    }catch(IOException e){      System.out.println("連接配接伺服器出現I/O錯誤!");    }    } } package client; public class ClientDemo {       public static void main(String[] args) {      // TODO Auto-generated method stub if(args.length!=2){    System.out.println("程式運作方式:java client ");    return; } String host=args[0]; try{    int port=Integer.parseInt(args[1]);    Client myserver=new Client(host,port); }catch(Exception e){    System.out.println(e); }    } }