天天看點

黑馬程式員--TCP網絡程式的工作原理

TCP網絡程式的工作原理

      TCP用戶端程式與TCP伺服器端程式的互動過程:

            1)伺服器程式建立一個ServerSocket,然後調用accept方法等待客戶來連接配接。

            2)用戶端程式建立一個Socket并請求與伺服器建立連接配接

            3)伺服器接收客戶的連接配接請求,并建立一個新的Socket與該客戶建立專線連接配接

            4)建立了連接配接的兩個Socket在一個單獨的線程上對話

            5)伺服器開始等待新的連接配接請求,當新的連接配接請求到達時,重複步驟(2)到步驟(5)的過程

      ServerSocket構造函數:

                  - public serverSocket()

                  - public serverSocket(int port)

                  - public serverSocket(int port,int backlog)

                  - public serverSocket(int port,int backlog,InetAddress bindAddr)

           close方法

           accept方法

     Socket構造函數:

                  - public Socket()

                  - public Socket(String host,int port)

                  - public Socket(InetAddress,add,int port)

                  - public Socket(String host,int port,InetAddress local,int localPort)

                  - public Socket(InetAddress address,int port,InetAddress localAddr,int localPort)

 舉例: 從網絡輸入流中一次讀取一行檔案

   package Chat;

import java.io.*;

import java.net.ServerSocket;

import java.net.Socket;

public class TcpServer {

 public static void main(String[] args) throws IOException {

  //建立ServerSocket對象

  ServerSocket ss = new ServerSocket(9999);

  //傳回Socket 對象

  Socket s = ss.accept();

  //傳回 InputStream 對象

  InputStream ips = s.getInputStream();

  //傳回 OnputStream 對象

  OutputStream ops = s.getOutputStream();

  //寫入輸出流

  ops.write("歡迎!!!".getBytes());

  //建立位元組流數組

  //byte [] buf = new byte[1024];

  //輸入流讀

  //int len = ips.read(buf);

 // System.out.println(new String(buf,0,len));

  BufferedReader br = new BufferedReader(new InputStreamReader(ips));

  br.readLine();

  br.close();

  //關閉流

  //ips.close();

  ops.close();

  //關閉對象

  s.close();

  ss.close();

 }

}

          TCP伺服器程式模型的編寫要點:

                  TCP伺服器程式要想能接收多個用戶端連接配接,需要循環調用ServerSocket.accept方法

                  伺服器程式與每個用戶端連接配接的會話過程不能互相影響,需要在獨立的線程中運作

                  一個線程服務對象與一個伺服器端Socket對象相關聯,共同來完成與一個用戶端的會話