国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 全面掌握網絡編程篇

Java 全面掌握網絡編程篇

2022-02-19 14:36青素i Java教程

網絡編程是指編寫運行在多個設備(計算機)的程序,這些設備都通過網絡連接起來。java.net 包中 J2SE 的 API 包含有類和接口,它們提供低層次的通信細節。你可以直接使用這些類和接口,來專注于解決問題,而不用關注通信細節

計算機網絡

是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作系統,網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統。包括局域網(intranet)和廣域網(internet)

 

網絡模型

網絡模型一般是指
○ OSI(Open System Interconnection開放系統互連)參考模型
○ TCP/IP參考模型
網絡編程 就是用來實現網絡互聯的不同計算機上運行的程序間可以進行數據交換。
計算機網絡之間以何種規則進行通信,就是網絡模型研究問題

Java 全面掌握網絡編程篇

 

客戶機服務器模式(Client/Server)

●為了實現兩臺計算機的通信,必須要用一個網絡線路連接兩臺計算機。
● 服務器(Server)是指提供信息的計算機或程序
●客戶機(Client)是指請求信息的計算機或程序
●網絡用于連接服務器與客戶機,實現兩者相互通信。

Java 全面掌握網絡編程篇

 

TCP/IP的概念和實現

TCP/IP:Transmission Control Protocol/Internet Protocol的簡寫。TCP 是傳輸控制協議的縮寫,它保障了兩個應用程序之間的可靠通信。通常用于互聯網協議,被稱 TCP / IP。

 

TCP三次握手(Three-way handshake)

所謂的“三次握手”即對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據量而確定的數據確認數及數據發送、接收完畢后何時撤消聯系,并建立連接。
? 第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,并進入SYN_SENT狀態,等待服務器確認;
SYN:同步序列編號(Synchronize Sequence Numbers)。
? 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(seq=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
? 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ETABLISHED(TCP連接成功)狀態,完成三次握手。
? 完成三次握手,客戶端與服務器開始傳送數據

Java 全面掌握網絡編程篇

 

TCP編程

套接字(Socket)是使用TCP提供了兩臺計算機之間的通信機制。
客戶端程序創建一個套接字,并嘗試連接服務器的套接字。
當連接建立時,服務器會創建一個 Socket 對象。客戶端和服務器現在可以通過對
Socket 對象的寫入和讀取來進行通信。
? 服務端:
創建服務端對象,監聽一個端口

ServerSocket ss = new ServerSocket(100);

獲取客戶端對象

Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();

? 客戶端:
創建客戶端socket服務,把ip和端口作為地址傳進構造函數

Socket s = new Socket("localhost",100);

 

UDP的概念和實現

UDP(User Datagram Protocol):UDP 是用戶數據報協議的縮寫,一個無連接的協議。提供了應用程序之間要發送的數據的數據包。
用戶數據包協議(UDP)是網絡信息傳輸的另一種形式,基于UDP的通信與基于TCP的通信不同,UDP的信息傳遞更快,但不提供可靠的保證。

 

UDP編程

發送端:
建立udp服務,發送端沒有指定端口,會自動分配一個端口
DatagramSocket ds = new DatagramSocket();
定義數據內容,并將數據封裝成包
byte[] bt = “hello,udp,我來了”.getBytes();
把要發送的數據和ip、port封裝到數據包里
DatagramPacket db = new
DatagramPacket(bt,bt.length,InetAddress.getByName(“192.168.1.105”),10000);
通過udp的socket服務中的功能完成數據包的發送 ds.send(db);
接收端:定義socket服務,監聽端口
DatagramSocket ds = new DatagramSocket(10000);
預先定義好一個數據包,用于存儲接收到的數據
byte[] bt = new byte[1024];
創建數據包對象,用于接收數據
DatagramPacket dp = new
DatagramPacket(bt,bt.length);
使用socket服務的receive方法將接受到的數據存儲到數據包中
ds.receive(dp);
通過數據包對象,獲取數據包內容
byte[] data = dp.getData();
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();

 

TCP和UDP的區別

TCP:
1,面向連接的協議,在socket之間進行數據傳輸之前必然要建立連接,所以在TCP中需要連接時間。
2,TCP傳輸數據無大小限制,一旦連接建立起來,雙方的socket就可以按統一的格式傳輸大的數據。
3,TCP是一個可靠的協議,它確保接收方完全正確地獲取發送方所發送的全部數據。
UDP:
1,每個數據報中都給出了完整的地址信息,因此無需要建立發送方和接收方的連接。
2,UDP傳輸數據時是有大小限制的,每個被傳輸的數據報必須限定在64KB之內。
3,UDP是一個不可靠的協議,發送方所發送的數據報并不一定以相同的次序到達接收方

TCP和UDP最大的區別在于是否需要客戶端與服務端建立連接后才能進行數據傳輸。

 

聊天室

服務器處理線程

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.Socket;
import java.net.SocketException;
import java.util.Scanner;

public class ServerTask  implements Runnable{
	
	
	private Socket socket;

	
	public ServerTask(Socket socket) {
		// TODO 自動生成的構造函數存根
		this.socket = socket;
	
	}
	
	@Override
	public void run() {
		// TODO 自動生成的方法存根
		
		//建立通信后所執行的內容
		
		System.out.println("歡迎【"+socket.getRemoteSocketAddress().toString()+"】進入聊天室");
		
		//構建讀取緩沖
		BufferedReader br =null;
		//http響應寫入
		PrintWriter pw = null;
		
		try {
			
			//獲取客戶端輸入的信息 字節流緩沖成字符流
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String msg;
			
			while((msg=br.readLine()) != null) {
				msg = "【"+socket.getRemoteSocketAddress().toString()+"】說"+msg;
				
				//輸出客戶端信息
				System.out.println(msg);
				
				//服務器接收到客戶端的消息發送消息給客戶端
				Scanner scanner = new Scanner(System.in);
				System.out.println("請輸入要發送的信息!");
				
				
				pw = new PrintWriter(socket.getOutputStream(),true);
				pw.println("服務器說:"+scanner.nextLine());
				pw.flush();				
			}	
		}catch (SocketException e) {
			// TODO: handle exception
			System.out.println(socket.getRemoteSocketAddress().toString()+"退出聊天室!");
		}	
		catch (Exception e) {
			// TODO: handle exception
		}
		
	}

}

客戶端處理線程

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.util.Scanner;


public class ClientTask  implements Runnable{

	private Socket socket;
	
	
	
	public ClientTask(Socket socket) {
		// TODO 自動生成的構造函數存根
		this.socket = socket;
	}
	
	
	@Override
	public void run() {
		// TODO 自動生成的方法存根
		
		try {
				while(true) {
					Scanner scanner = new Scanner(System.in);
					System.out.println("請輸入要發送的信息");
					//消息發送到服務器
					
					PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
					
					//br.readLine()讀取的消息發送到服務器
					pw.println(scanner.nextLine());

					
					//讀取服務器發送的消息
					BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					System.out.println(br.readLine());

				}		
		}
		catch (Exception e) {
			// TODO: handle exception
		}
		
		
		
	}

	
}

服務器

import java.net.ServerSocket;
import java.net.Socket;

import com.qingsu.chat.Task.ServerTask;

public class ChatServer {

	
	public static void main(String[] args) {
		try {
			
			//創建服務端對象 監聽一個窗口
			ServerSocket serverSocket = new ServerSocket(10622);
			System.out.println("服務器創建成功!端口號"+10622);
			
			//阻塞 直到有鏈接返回
			while(true) {
				Socket socket = serverSocket.accept();//獲取客戶端對象
				
				//啟動一個線程處理該鏈接
				
				Thread thread = new Thread(new ServerTask(socket));
				thread.start();
				
			}		
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

客戶端

import java.net.Socket;

import com.qingsu.chat.Task.ClientTask;

public class ChatClient {
	
	
	public static void main(String[] args) {
		try {
			
			//創建客戶端socket服務,把ip和端口作為地址傳進構造函數
			Socket socket = new Socket("127.0.0.1",10622);
			
			//啟動客戶機線程處理
			Thread thread = new Thread(new ClientTask(socket));		
			thread.start();
		
			
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

}

效果

Java 全面掌握網絡編程篇

到此這篇關于Java 全面掌握網絡編程篇的文章就介紹到這了,更多相關Java 網絡編程內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/Carryi/article/details/120730448

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产一区二区三区免费在线 | 成人免费在线电影 | 精品自拍视频在线观看 | 香蕉久久精品视频 | 在线二区| 久久久久亚洲精品 | 日韩成人在线影院 | 五月宗合网 | 成人高清视频在线观看 | 欧美黄色录像 | 日韩电影在线一区 | 自拍偷拍 亚洲 | 国产精品一区久久久 | 探花在线观看 | 中文免费字幕 | 高清一区二区在线观看 | 久久久久综合视频 | 欧美一区二区三区在线观看 | 日韩色综合 | 国产精品第一 | 成人黄色在线 | 欧美一级黄色片免费看 | 国产在线一区不卡 | 久久久www免费人成精品 | 成人在线视频一区 | 国产精品久久久久久久久久久久冷 | 九九久久久 | 成年人在线看片 | 日本高清视频网站www | 国产黄色91视频 | 中文字幕免费看 | 高清国产一区 | 欧美一区二区三区免费观看视频 | 免费av在线播放 | 天天综合7799精品影视 | 一区二区在线视频 | 国产av毛片| 亚洲精品久久久久久一区二区 | t66y最新地址一地址二69 | h在线免费 | 久久久网页 |