網(wǎng)絡(luò)編程有三個(gè)要素,分別是IP地址、端口號(hào)和通信協(xié)議,那本文主要講述的是TCP與UDP這兩種通信協(xié)議,以及編程的實(shí)現(xiàn)。
首先,我們需要了解一下IP地址、端口號(hào)、通信協(xié)議的相關(guān)知識(shí)。
一、IP地址
網(wǎng)絡(luò)中的計(jì)算機(jī)使用IP地址來進(jìn)行唯一標(biāo)識(shí),IP地址有IPv4和IPv6兩種類型。IPv4采用十進(jìn)制或二進(jìn)制表示形式,十進(jìn)制是一種比較常用的表示形式,如192.168.1.131,IPv6采用十六進(jìn)制表示形式,一般不常用。
如何查看IP地址相關(guān)信息:
在Windows系統(tǒng)下,打開cmd,輸入命令ipconfig,按回車即可查看。在Linux或Mac系統(tǒng)下,打開終端,使用ifconfig命令,按回車即可查看。
二、端口號(hào)
端口號(hào)是計(jì)算機(jī)中的應(yīng)用程序的一個(gè)整數(shù)數(shù)字標(biāo)號(hào),用來區(qū)分不同的應(yīng)用程序。
0 ~ 1024 未被系統(tǒng)使用或保留的端口號(hào),0 ~ 65535為有效的端口號(hào),也就是說我們要對(duì)一些程序定義端口號(hào)的時(shí)候,要選擇1024 ~ 65535范圍內(nèi)的整數(shù)數(shù)字。
比如,以前學(xué)過的MySQL的端口號(hào)是3306,SQLServer的端口號(hào)是1433,查了一下Oracle的端口號(hào)是1521。
一定要把這些數(shù)據(jù)庫(kù)對(duì)應(yīng)的端口號(hào),藏在深深的腦海里,以后在連接數(shù)據(jù)庫(kù)的時(shí)候,會(huì)使用到端口號(hào)。
三、通信協(xié)議
說得通俗一點(diǎn),通信協(xié)議就是網(wǎng)絡(luò)通信中的規(guī)則,分為TCP協(xié)議和UDP協(xié)議兩種。
第一種:TCP協(xié)議
英文名:Transmission Control Protocol 中文名:傳輸控制協(xié)議 協(xié)議說明:TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。
舉例:打電話,需要雙方都接通,才能進(jìn)行對(duì)話
特點(diǎn):效率低,數(shù)據(jù)傳輸比較安全
第二種:UDP協(xié)議
英文名:User Datagram Protocol 中文名:數(shù)據(jù)報(bào)協(xié)議 協(xié)議說明:UDP是一種面向無連接的傳輸層通信協(xié)議。
舉例:發(fā)短信,不需要雙方建立連接,But,數(shù)據(jù)報(bào)的大小應(yīng)限制在64k以內(nèi)
特點(diǎn):效率高,數(shù)據(jù)傳輸不安全,容易丟包
四、三要素關(guān)系圖與網(wǎng)絡(luò)模型圖
1、網(wǎng)絡(luò)編程三要素關(guān)系圖
注:圖中端口號(hào)、IP地址為演示,并非真實(shí)
2、OSI參考模型與TCP/IP參考模型
五、TCP編程
TCP是基于字節(jié)流的傳輸層通信協(xié)議,所以TCP編程是基于IO流編程。
對(duì)于客戶端,我們需要使用Socket類來創(chuàng)建對(duì)象。對(duì)于服務(wù)器端,我們需要使用ServerSocket來創(chuàng)建對(duì)象,通過對(duì)象調(diào)用accept()方法來進(jìn)行監(jiān)聽是否有客戶端訪問。
客戶端與服務(wù)器端圖解:
客戶端與服務(wù)器端實(shí)現(xiàn)步驟:
前提:創(chuàng)建一個(gè)項(xiàng)目,在項(xiàng)目中創(chuàng)建兩個(gè)模塊(model),一個(gè)模塊用來放客戶端相關(guān)代碼,一個(gè)模塊用來放服務(wù)器端相關(guān)代碼。
目錄結(jié)構(gòu)如下圖
客戶端 :
1、創(chuàng)建Socket對(duì)象,并指定服務(wù)器端應(yīng)用程序的端口號(hào)和服務(wù)器端主機(jī)的IP地址。
2、使用Socket的對(duì)象調(diào)用getOutputStream()方法來獲取字節(jié)輸出流對(duì)象。
3、調(diào)用字節(jié)輸出流的write(byte[] buf)或者write(int b)向服務(wù)器發(fā)送指定數(shù)據(jù)。
4、記得關(guān)閉流。
服務(wù)器端 :
1、創(chuàng)建ServerSocket對(duì)象,并指定該應(yīng)用程序的端口號(hào),端口號(hào)必須和客戶端指定的端口號(hào)一樣。
2、使用ServerSocket對(duì)象的accept()方法來監(jiān)聽客戶端發(fā)送過來的請(qǐng)求,返回值為Socket對(duì)象。
3、調(diào)用Socket對(duì)象的getInputStream()方法獲取字節(jié)輸入流對(duì)象
4、調(diào)用字節(jié)輸入流對(duì)象的read(byte[] buf)或read()方法獲取數(shù)據(jù)。
5、記得關(guān)閉流。
實(shí)例 :
客戶端向服務(wù)器端發(fā)送信息,并顯示在服務(wù)器端。
Client類(客戶端)
package cn.tkrnet.client;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
//創(chuàng)建Socket對(duì)象,指定要發(fā)送到服務(wù)器端的IP地址,以及服務(wù)器端應(yīng)用程序接收的端口號(hào)
//localhost代表本機(jī)IP地址
Socket client = new Socket("localhost",9000);
//獲取輸出流,用于向服務(wù)器端發(fā)送數(shù)據(jù)
OutputStream os = client.getOutputStream();
os.write("Java is my friend !".getBytes());
System.out.println("信息已發(fā)送");
//關(guān)閉流
os.close();
client.close();
}
}
s
-
通信協(xié)議
+關(guān)注
關(guān)注
28文章
925瀏覽量
40598 -
TCP
+關(guān)注
關(guān)注
8文章
1390瀏覽量
79658 -
UDP
+關(guān)注
關(guān)注
0文章
329瀏覽量
34178 -
ip地址
+關(guān)注
關(guān)注
0文章
304瀏覽量
17249 -
網(wǎng)絡(luò)編程
+關(guān)注
關(guān)注
0文章
72瀏覽量
10355
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
TCP協(xié)議和UDP協(xié)議對(duì)比 UDP協(xié)議的原理及應(yīng)用

linxu網(wǎng)絡(luò)協(xié)議分析:IP協(xié)議、TCP協(xié)議、UDP協(xié)議

通信必備知識(shí)!TCP與UDP協(xié)議介紹及使用

TCP協(xié)議和UDP協(xié)議的區(qū)別有哪些
通訊協(xié)議TCP和UDP協(xié)議使用方法
(WiFi干貨)WiFi模塊的TCP和UDP協(xié)議
TCP協(xié)議與UDP協(xié)議的區(qū)別和相同點(diǎn)有哪些 一文看懂TCP協(xié)議與UDP協(xié)議的優(yōu)缺點(diǎn)

TCP協(xié)議和UDP協(xié)議的區(qū)別
一文搞明白TCP協(xié)議與UDP協(xié)議(下)

TCP協(xié)議和UDP協(xié)議最核心的區(qū)別是什么?

udp是什么協(xié)議 TCP與UDP的區(qū)別
TCP/IP協(xié)議進(jìn)階課程:5、UDP協(xié)議

評(píng)論