java網絡編程ServerSocket類 和Socket類的常用構造方法及其方法


Socket類
Socket(InetAddress address, int port)
創建一個流套接字並將其連接到指定 IP 地址的指定端口號。
Socket(String host, int port)
創建一個流套接字並將其連接到指定主機上的指定端口號。
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
創建一個套接字並將其連接到指定遠程地址上的指定遠程端口。
Socket(String host, int port, InetAddress localAddr, int localPort)
創建一個套接字並將其連接到指定遠程主機上的指定遠程端口。

close()
關閉此套接字。
connect(SocketAddress endpoint)
將此套接字連接到服務器。
connect(SocketAddress endpoint, int timeout)
將此套接字連接到服務器,並指定一個超時值。
getInetAddress()
返回套接字連接的地址。
getInputStream()
返回此套接字的輸入流。
getLocalPort()
返回此套接字綁定到的本地端口。
getOutputStream()
返回此套接字的輸出流。
getPort()
返回此套接字連接到的遠程端口。


ServerSocket類
ServerSocket(int port)
創建綁定到特定端口的服務器套接字。
accept()
偵聽並接受到此套接字的連接。
getInetAddress()
返回此服務器套接字的本地地址。

Socket編程步驟
服務器端創建ServerSocket對象,調用accept方法返回Socket對象
客戶端創建Socket對象,通過端口連接到服務器
客戶端、服務器端都使用Socket中的getInputStream方法和getOutputStream方法獲得輸入流和輸出流,進一步進行數據讀寫操作

(InetAddress用來描述主機地址;
Socket用來創建兩台主機之間的連接;
ServerSocket用來偵聽來自客戶端的請求;
Socket通常稱作“套接字”,通常通過“套接字”向網絡發出請求或者應答網絡請求。)

 

單一服務器對多客戶端
服務端:每次連接成功一個客戶端,則啟動一個線程為其服務

public class Server {
  public static void main(String[] args) throws IOException {
    ServerSocket ss = new ServerSocket(10086);
    System.out.println("服務器正常啟動。。。");
    while(true){
      Socket socket = ss.accept();
      System.out.println("用戶接入成功。。。");
      new ServerThread(socket).start();
    }
  }
}

 

單一服務器對多客戶端

客戶端:

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.io.OutputStreamWriter;
 5 import java.io.PrintWriter;
 6 import java.net.InetAddress;
 7 import java.net.Socket;
 8 import java.net.UnknownHostException;
 9 import java.util.Scanner;
10 
11 
12 public class Client {
13     private static PrintWriter pw=null;
14     private static BufferedReader br=null;
15     private static Socket s;
16     static Scanner scanner=new Scanner(System.in);
17     /**
18      * @param args
19      */
20     public static void main(String[] args) {
21         // TODO Auto-generated method stub
22         try {
23             Socket s=new Socket(InetAddress.getLocalHost(),5500);
24             pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
25             br=new BufferedReader(new InputStreamReader(s.getInputStream()));
26             while(true){
27                 System.out.println("Client端請輸入:");
28                 String str = scanner.next();
29                 pw.println(str);
30                 pw.flush();
31                 String string=br.readLine();
32                 System.out.println("Client讀到:"+string);
33                 if(str.equals("exit")){
34                     break;
35                 }
36             } 
37         }catch (Exception e) {
38                 // TODO Auto-generated catch block
39                 e.printStackTrace();
40         }
41         try {
42             br.close();
43             pw.close();
44         } catch (IOException e1) {
45                 // TODO Auto-generated catch block
46                 e1.printStackTrace();
47         }
48     }
49 }

 

服務端

import java.io.BufferedReader;
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 {
    private static BufferedReader br=null;
    private static PrintWriter pw=null;
    private static ServerSocket ss;
    private static Socket s;
    static Scanner scanner=new Scanner(System.in);
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            ss=new ServerSocket(5500);
            System.out.println("服務器正常啟動。。。。");
            s=ss.accept();//阻塞方法
            System.out.println("連接成功"+s.getRemoteSocketAddress());
            br=new BufferedReader(new InputStreamReader(s.getInputStream()));
            pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
            while(true){
                String string=br.readLine();
                System.out.println("Server讀到:"+string);
                System.out.println("Server端請輸入:");
                String str=scanner.next();
                pw.println(str);
                pw.flush();
                if(str.equals("exit")){
                    break;
                }
            }
        } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
        }
        try {
            pw.close();
            br.close();
        } catch (IOException e1) {
                // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM