網絡編程TCP協議
課程大綱
一、 TCP程序概述
1、 TCP是一種可靠傳輸協議,是一種面向鏈接的協議。
2、 實現TCP,需要實現服務器端和客戶端,JavaAPI爲我們提供了java.net包,爲實現網絡應用程序提供類。
3、 ServerSocket:此類實現服務器端套接字,
4、 Socket:此類實現客戶端套接字(也可以叫套接字)
5、 Socket是網絡驅動層提供給應用程序編程的接口和一種機制。
二、 數據發送過程
1、
三、 數據接收過程
1、
四、 實現服務器端和客戶端程序
(1)、服務器端:
1、 服務器端:public class ServerSocket extends Object
2、 此類實現服務器端套接字,服務器端套接字等待請求通過網絡接入,他基於該請求執行某些操作,然後可能向請求者返回結果。
3、 ServerSocket(int port):創建綁定到特定端口的服務器套接字。
4、 Void serSo_Timeout(int timeout):通過制定超時值啓用/禁用So_TIMEOUT,以毫秒爲單位
5、 InetAddress getInetAddress():返回此服務器套接字的本地地址。
6、 Socket accept():偵聽並接受到此套接字的連接。
(2)、客戶端:
1、public class Socket extens Object
2、此類實現客戶端套接字,套接字是兩臺機器通信的端點。
3、Socket(String host,int port):創建一個流套接字並將其連接到指定主機上的指定端口。
4、InputStream getInputStream():返回此套接字的輸入流。
5、OutputStream getOutputStream():返回此套接字的輸出流。
6、void setSo_Timeout(int timeout):啓用/禁用帶有指定超時值得SO_TIMEOUT,以毫秒爲單位。
服務端代碼
package us.google;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author chongrubujing
*
*/
public class ServerDemo {
public static void main(String[] args) {
//創建一個服務器端的Socket
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("服務器已經啓動,正在等待連接中。。。。。");
Socket s = ss.accept();//等待客戶端連接,會阻塞
String info = "親,您的寶貝已經發貨,請注意查收!";
//構造 一個字符輸出流
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream()));
bw.write(info);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客戶端代碼
package us.google;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* TCP客戶端程序
* @author chongrubujing
*
*/
public class ClientDemo {
public static void main(String[] args) {
//創建一個客戶端的Socket對象(IP/主機名,端口號)
try {
Socket s = new Socket("192.168.0.51",8888);
System.out.println("與服務器連接成功");
//構造一個字符輸入利於
//s.getInputStream()返回此套接字的輸入流
BufferedReader br = new BufferedReader(
new InputStreamReader(s.getInputStream()));
String info = br.readLine();
System.out.println(info);
br.close();
s.close();
}catch(UnknownHostException e){
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}