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對象相關聯,共同來完成與一個用戶端的會話