JAVA后端學(xué)習(xí)精華之網(wǎng)絡(luò)通信項目進階
Java網(wǎng)絡(luò)通信項目進階
一、網(wǎng)絡(luò)通信解決的問題
不同機器,不同程序之間的數(shù)據(jù)交換
二、計算機網(wǎng)絡(luò)的概念
計算機網(wǎng)課是指將地理位置不同的具有獨立功能的多臺計算機及外部設(shè)備通過通信線路連接起來,在網(wǎng)絡(luò)操作系統(tǒng),網(wǎng)絡(luò)管理軟件及網(wǎng)絡(luò)通信協(xié)議的管理和協(xié)調(diào)下,實現(xiàn)資源共享和信息傳遞的計算機系統(tǒng)。
三、IP
- ip地址:InetAddress
- 通過ip地址可以唯一定位一臺網(wǎng)絡(luò)上的計算機
- 127.0.0.1/0.0.0.0 本機localhost,本機,自己的ip都是這個
- ip地址分類:IPV4/IPV6
- IPV4 127.0.0.1,4個字節(jié)組,32bit,40億已用盡。
- IPV6 128位。8個無符號整數(shù),如:
2001:0bb2:aaaa:0015:0000:0000:1aaa:1312
- 局域網(wǎng)中的IP地址:同一個網(wǎng)絡(luò)中其他機器可以使用這個IP訪問你的機器
- 同一個區(qū)域多臺計算機構(gòu)成局域網(wǎng)->多個局域網(wǎng)構(gòu)成城域網(wǎng)->多個城域網(wǎng)構(gòu)成廣域網(wǎng)
四、域名
域名如:www.baidu.com
因為ip地址不好記憶,且長期更換,所以由域名來代替ip地址方便記憶
DNS根服務(wù)器
DNS(Domain Name System,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址互相映射的一個分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機器直接讀取的IP數(shù)串
五、端口
端口表示計算機上的一個程序或進程;
不同的進程有不同的端口號,用來區(qū)分軟件
單個協(xié)議下端口號不能沖突
端口分離
公有端口0-1023
- HTTP:80
- HTTPS:43
- FTP:21
- Telent:23
程序注冊端口:1024-49141,分配用戶或者程序
- Tomcat:8080
- MySQL:3306
- Oracle:1521
動態(tài)、私有:49152-65535
端口常用指令
netstat -ano #查看所有的端口 netstat -ano|"5900" #查看指定的端口 tasklist|findstr "8986" #查看指定端口的進程
六、利用telnet完成簡單的網(wǎng)絡(luò)通信
雙端通信 C/S架構(gòu),一個為客戶端,一個為服務(wù)端
Socket為Java中包裝TCP連接的一個對象
代碼如下
package com.lding.net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @program: Net
* @description: Telnet實現(xiàn)信息傳輸
* @author: 王丁
* @date: 2021-09-15 22:45
**/
public class TelnetServer {
public static void main(String[] args) throws IOException {
//創(chuàng)建一個Socket,Socket包裝tcp連接
//指定端口
//端口:65536 0-1024端口盡量不要使用避免沖突
ServerSocket ssc=new ServerSocket(9999);
//監(jiān)聽客戶端的Socket連接
System.out.println("服務(wù)端開啟:ip:"+ssc.getInetAddress().getHostAddress()+"端口號:"+ssc.getLocalSocketAddress());
System.out.println("正在等待有緣人......");
//阻塞監(jiān)聽,直到有客戶端連接上來
Socket socketClient = ssc.accept();
System.out.println("客戶端已連接:"+socketClient.getInetAddress());
System.out.println("客戶端端口"+socketClient.getPort());
//傳輸數(shù)據(jù) IO流 字節(jié)流 字符流
//服務(wù)端發(fā)送給客戶端消息:從客戶端的Socket獲取一個輸出流,向這個輸出流中寫入數(shù)據(jù)作為消息內(nèi)容
OutputStream output =socketClient.getOutputStream();
output.write(97);
output.write("Hello,Client!!!".getBytes());
//服務(wù)端從客戶端接收消息:從客戶端的Socket獲取一個輸入流,從這個輸入流中讀數(shù)據(jù)
InputStream input=socketClient.getInputStream();
while(true){
int readnum=input.read();
System.out.println((char)readnum);
output.write(("to_:"+(char)readnum).getBytes());
}
}
}
運行過程:
服務(wù)端運行后一直等待連接,因為accept方法是一種阻塞監(jiān)聽

使用telnet連接端口
命令格式:telnet+空格+ip地址+端口號

連接成功后,阻塞結(jié)束



使用telnet發(fā)送的數(shù)據(jù)在idea運行端口可以實時收到,實現(xiàn)了客戶端發(fā)送給數(shù)據(jù)到服務(wù)端,同時服務(wù)端也能把接收到的數(shù)據(jù)傳回去
到此這篇關(guān)于JAVA后端學(xué)習(xí)精華之網(wǎng)絡(luò)通信項目進階的文章就介紹到這了,更多相關(guān)Java 網(wǎng)絡(luò)通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?MyBatis實戰(zhàn)之QueryWrapper中and和or拼接技巧大全
在Java中QueryWrapper是MyBatis-Plus框架中的一個查詢構(gòu)造器,它提供了豐富的查詢方法,其中包括and和or方法,可以用于構(gòu)建復(fù)雜的查詢條件,這篇文章主要給大家介紹了關(guān)于Java?MyBatis實戰(zhàn)之QueryWrapper中and和or拼接技巧的相關(guān)資料,需要的朋友可以參考下2024-07-07
Apache Commons Math3探索之多項式曲線擬合實現(xiàn)代碼
這篇文章主要介紹了Apache Commons Math3探索之多項式曲線擬合實現(xiàn)代碼,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考。2017-10-10
如何利用反射生成?MyBatisPlus中QueryWrapper動態(tài)條件
這篇文章主要介紹了如何利用反射生成?MyBatisPlus中QueryWrapper動態(tài)條件,分享在MyBatisPlus中經(jīng)常會用到代碼來構(gòu)造查詢條件等內(nèi)容,需要的小伙伴可以參考一下2022-02-02

