大整數運算(必記)
技術標籤:java
計算機網路
計算機網路是指將地理位置不同的具有獨立功能的多臺計算機及其外部裝置,通過通訊線路連線起來,在網路作業系統,網路管理軟體及網路通訊協議的管理和協調下,實現資源共享和資訊傳遞的計算機系統。
javaweb:網頁程式設計 B/S
網路程式設計: TCP/IP C/S
1.2網路通訊的要素
如何實現網路的通訊?
通訊雙方地址
- ip
- 埠號
規則:網路通訊的協議
TCP/IP參考模型:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-V4gBstN9-1611078500579)(C:\Users\15512\AppData\Roaming\Typora\typora-user-images\image-20210116233320797.png)]
小結:
- 網路程式設計中有兩個主要問題
-
- 如何準確的定位帶網路上的一臺或者多臺主機
- 找到主機之後如何進行通訊
- 網路程式設計中的要素
-
- IP和埠號 IP
- 網路通訊協議:udp和tcp
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-LIwlXWck-1611078500583)(C:\Users\15512\AppData\Roaming\Typora\typora-user-images\image-20210116233616766.png)]
1.3、IP
ip地址:InetAddress
-
唯一定位一臺網路上的計算機
-
127.0.0.1:本機localhost
-
ip地址的分類
-
-
ipv4/ipv6
-
-
ipv4:127.0.0.1 ,四個位元組組成,0~255
-
ipv6:128位。8個無符號整數!
2001: 0bb2:aaaa:0015:0000:0000:1aaa:1312!
-
-
公網(網際網路)-私網(區域網)
- ABCD類地址
- 192.168.xx.xx,專門給組織內部使用的(0~255 折斷 )
-
-
域名:記憶IP的問題!
package cn.org.mubai.ip01;
import java.net.InetAddress;
import java.net.UnknownHostException;
//測試IP
public class TestIp01 {
public static void main(String[] args) {
try {
InetAddress i2=InetAddress.getByName("localhost");
System.out.println(i2);
InetAddress i3=InetAddress.getLocalHost();//返回本機當前ip
System.out.println(i3);
//查詢網站IP地址
InetAddress i1=InetAddress.getByName("www.mubai.org.cn");
System.out.println(i1);
System.out.println(i1.getHostAddress());//ip
System.out.println(i1.getCanonicalHostName());//規範的名字
System.out.println(i1.getHostName());//域名或者自己電腦的名字
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
/*
localhost/127.0.0.1
LAPTOP-QCLG1LR1/192.168.184.1
www.mubai.org.cn/121.196.155.165
121.196.155.165
mubai
www.mubai.org.cn*/
1.4、埠
埠表示計算機上的一個程式的程序;
-
不同的程序有不同的埠號!用來區分軟體
-
被規定0~65536
-
TCP,UTP: 65536*2 ,單個協議下,埠號不能衝突
-
埠分類
-
公有埠0~1023
- HTTP:百度80
-
程式註冊埠:1024~49151,分配使用者或者程式
-
動態,私有:49152~65535
netstat -ano#檢視所有的埠 netstat -ano|findstr "8080" #檢視指定的埠 tasklist|findstar "8080" #檢視指定埠的程序
package cn.org.mubai.ip01; import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; import java.net.InetSocketAddress; public class TestIp02 { public static void main(String[] args) { InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080); InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 8080); System.out.println(socketAddress); System.out.println(socketAddress2); System.out.println(socketAddress.getAddress()); System.out.println(socketAddress.getHostName());//地址 System.out.println(socketAddress.getPort());//埠 } } /127.0.0.1:8080 localhost/127.0.0.1:8080 /127.0.0.1 127.0.0.1 8080
-
1、5通訊協議
協議: 約定
**網路通訊協議:**速率,傳輸位元速率,程式碼結構,傳輸控制。。。。
**TCP/IP協議簇:**實際是一組協議
重要:
- TCP:使用者傳輸協議
- UDP:使用者資料報協議
- IP:網路互連協議
TCP UDP 對比
TCP:打電話
-
連線,穩定
-
三次握手四次揮手 -
A:你瞅啥? B:瞅你咋地 A:幹一架 A:我要走了 B:你要走了嗎? B:你真的真的要走了嗎 A:我真的要走了
-
客戶端、服務端
-
傳輸完成,釋放連線,效率低
UDP:發簡訊
- 不連線,不穩定
- 客戶端、服務端:沒有明顯的界限、
- 不管有沒有準備好,都發給你。。。
- DDOS:洪水攻擊!
1、6TCP
客戶端
1連線伺服器Socket
2傳送訊息
package cn.org.mubai.ip01;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TestTcpClient01 {
//1.要知道伺服器地址
public static void main(String[] args) {
Socket socket=null;
OutputStream os=null;
try {
InetAddress serverIP = InetAddress.getByName("127.0.0.1");
//2埠號
int port=9999;
//建立一個socket連線
socket = new Socket(serverIP,port);//將ip地址和埠號
// 3.傳送訊息 IO流
os = socket.getOutputStream();
os.write("你好".getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally {
if (socket!=null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os!=null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
伺服器
1建立服務埠serverSocket
2等待使用者的連線accept
3接收訊息
package cn.org.mubai.ip01;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestTcpServer01 {
// 我得有一個地址
public static void main(String[] args) {
ServerSocket serverSocket=null;
Socket socket=null;
InputStream is=null;
ByteArrayOutputStream bos=null;
try {
serverSocket = new ServerSocket(9999);
// 等待客戶端連線過來
socket=serverSocket.accept();
// 讀取客戶端的訊息
is = socket.getInputStream();
// 管道流
bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while((len=is.read(buffer))!=-1){
bos.write(buffer,0,len);
}
System.out.println(bos.toString());
} catch (IOException e) {
e.printStackTrace();
}finally {
if (bos!=null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(is!=null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket!=null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (serverSocket!=null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
檔案上傳
package cn.org.mubai.ip01;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TestClientIp02 {
public static void main(String[] args) throws Exception {
//建立一個Socket連線
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
//建立一個輸出流
OutputStream os = socket.getOutputStream();
//檔案流讀取檔案
FileInputStream fil = new FileInputStream(new File("C:\\Users\\15512\\Desktop\\mubai.JPG"));
// 寫出檔案
// 管道流
byte[] buffer=new byte[1024];
int len;
while((len=fil.read(buffer))!=-1){
os.write(buffer,0,len);
}
// 通知伺服器結束
socket.shutdownOutput();
// 確定伺服器接收完畢才能斷開連線
InputStream inputStream = socket.getInputStream();
// String byte[]
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len2;
while((len2=inputStream.read(bytes))!=-1){
byteArrayOutputStream.write(bytes,0,len2);
}
System.out.println(byteArrayOutputStream.toString());
byteArrayOutputStream.close();
inputStream.close();
fil.close();
os.close();
socket.close();
}
}
package cn.org.mubai.ip01;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServerIp2 {
public static void main(String[] args) throws Exception {
// 建立服務
ServerSocket serverSocket = new ServerSocket(9000);
// 監聽客戶端的連線
Socket accept = serverSocket.accept();//阻塞式監聽,會一直等待客戶端連線
// 獲取輸入流
InputStream is = accept.getInputStream();
// 檔案輸出
FileOutputStream fos=new FileOutputStream("C:\\Users\\15512\\Desktop\\mubai-org1.JPG");
byte[] bytes = new byte[1024];
int len;
while((len=is.read(bytes))!=-1){
fos.write(bytes,0,len);
}
// 通知客戶端我接收完畢
OutputStream os = accept.getOutputStream();
os.write("ok".getBytes());
// 關閉資源
fos.close();
is.close();
accept.close();
serverSocket.close();
}
}
UDP
發簡訊,不用連線
package cn.org.mubai.ip01;
import java.net.*;
public class TestUdpClient{
public static void main(String[] args) throws Exception {
// 建立一個socket
DatagramSocket socket = new DatagramSocket();
// 建立一個包
String mgs="hello!mubai-org";
InetAddress localhost = InetAddress.getByName("localhost");
int prot=9090;
// 資料,資料的長度起始。要傳送給誰
DatagramPacket packet = new DatagramPacket(mgs.getBytes(), 0, mgs.getBytes().length, localhost, prot);
// 傳送包
socket.send(packet);
socket.close();
}
}
package cn.org.mubai.ip01;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class TestUdpServer {
public static void main(String[] args) throws Exception {
// 開放埠
DatagramSocket socket = new DatagramSocket(9090);
// 接收資料包
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
socket.receive(packet);//阻塞接收
System.out.println(new String(packet.getData(),0,packet.getData().length));
socket.close();
}
}
多執行緒實現聊天
package cn.org.mubai.ip01;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class TestClientThread implements Runnable{
DatagramSocket socket=null;
BufferedReader reader=null;
private int myProt;
private String ToIp="localhost";
private int Toprot;
public TestClientThread(int myProt, String toIp, int toprot) {
this.myProt = myProt;
ToIp = toIp;
Toprot = toprot;
try{
socket = new DatagramSocket(this.myProt);
reader = new BufferedReader(new InputStreamReader(System.in));
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
// 建立一個包
boolean s=true;
while(s){
try {
String mgs=reader.readLine();
InetAddress localhost = InetAddress.getByName(ToIp);
int prot=Toprot;
// 資料,資料的長度起始。要傳送給誰
DatagramPacket packet = new DatagramPacket(mgs.getBytes(), 0, mgs.getBytes().length, localhost, prot);
// 傳送包
socket.send(packet);
if (mgs.equals("ok")){
s=!s;
}
}catch (Exception e){
e.printStackTrace();
}
}
socket.close();
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package cn.org.mubai.ip01;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class TestServerThread implements Runnable{
DatagramSocket socket=null;
private String mgs=null;
private int port;
public TestServerThread(int port,String mgs) {
this.port=port;
this.mgs=mgs;
try{
socket = new DatagramSocket(this.port);
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
boolean s=true;
while(s){
try{
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
socket.receive(packet);//阻塞接收
System.out.println(mgs+":"+new String(packet.getData(), 0, packet.getData().length));
if ("ok".equals(new String(packet.getData()))) {
s=!s;
}
}catch (Exception e){
e.printStackTrace();
}
}
socket.close();
}
}
package cn.org.mubai.ip01;
public class TestIpThreadTeacher {
public static void main(String[] args) {
Thread thread1 = new Thread(new TestClientThread(9999,"localhost",2020));
Thread thread2 = new Thread(new TestServerThread(9090,"老師"));
thread1.start();
thread2.start();
}
}
---------------------------------------------------------
package cn.org.mubai.ip01;
public class TestIpThreadStudent {
public static void main(String[] args) {
Thread thread1 = new Thread(new TestClientThread(2222,"localhost",9090));
Thread thread2 = new Thread(new TestServerThread(2020,"學生"));
thread1.start();
thread2.start();
}
}
兩個人可以是接收方也可以是傳送方
url
統一資源定位符:
DNS域名解析
package cn.org.mubai.ip01;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class TestURL {
public static void main(String[] args) throws IOException {
URL url = new URL("https://miao.baidu.com/abdr?data=eyJkYXRhIjoiNDk2NjI0YTE0NjFlNTQ3ZTE2OTA1MDNiNWQ1MWY5NTU3OWU5NjZmNDdhMjljMzU4NzhhOTZlNTdjYzE3M2ZhM2NlNmM3MWVmNGMwMTA5YThhMDU2N2MxNmYwNGYyZGYwMDYyMDU0OTRiMDAwNTVhMTM4NThjNjY0YjI3NDc3Y2Q5NjkwNTUxZDY0MDA2NjRjMDJhOWUxYTk0NjY1ZDg0OGE0YzZmMWYyMjhmZTc0Y2FlN2VmMDBiYzNiYjEwNmFkMGJkZjRmZjA4ZDk3NTYxOTI2OTE2ZWY2YTZmZjY1MjQ2ZGFjMDQ2Y2I4OTE1MjY1ZGZmZjllOTJhNDI1YmU0YWI3MTk1MTE0Mjg1NWI5NDFlY2QzMGJmOGM0NDg1NDFhOWMzMjgyZGVkOGE1NWIyZjQ2MjdhZjFmOGM4NTYzMTQ3MTc0MWU4YzRlZGE3NmE1NWQ5ZmVkNTBmODBiMmQ5MmJkMjZlYjNlNjI5Yzc2ZGY1ODEzZWMzMjBhMjc4YmNlNmZkNzJhYTQzZTk4OGY5YmEzZjc5MGIxZTg2MzFmOTk2Y2RhYWY0Y2IyMjUwNzZlMjk0ZGQ1N2QzNTI5ZDMzOWQyNmJjMzdmYWUwNmJiOWRjM2RlODU0MDU5ZDZlMzM3MDQyODg5ZTQzMmUxNzgxNGE1Y2IxNTQ1NTZkMTUwNjJhNzIwYWVlZmYwMmJiYTBiYTVjNDhjZGVhM2U4MGNhY2MwZWU5MGUyNWQxMWFmYmE2NTkyOTU3M2IzNWUxNjIxMDM0ODI2YmFhYmM4OGE4ZmNkNzgwMzhjNTU0NjMyOTYzYmYzNDNlYWQxNDFjYmU3M2RmZThmYjRkYjhhN2EzNmNjOTA3ODIzYWZjNjMxNzE1M2FiMGFhZWRmNTQ4ZjAxMTdhMjg1NDE5MWFiMjVlZTgyNTI1NmMzYTY1N2JiMWNmODMxY2RjZDc2MDI3NWU5NjI5MWVlMmY4Y2ZjOTI4ZjdjNDY1MjMyNDIwOTk4YTBhOTQwMWVkMzU2NTMxZmYzY2RmZmNkMDE1YzliZTIyOWU3ZjdiODljZjM1MWQ3ZTRhMzIwMzc5NjQ4NDg3ZTM1MTg4Yjg1MDViNTk3MWRlMjBjZmZmYmEwMGIwZDVlNWUwN2U4ZTQzMDI0NzI3YTkxZTgyMDJkNzI4OWM4NTNiYmU5MDA0YTk3OGRhMzNhYzFjMGFjNGE2ZDU0OGQ4YzdjYTEwZWVjMTI5MGM0ZGMyNjg3MTJlNmUxY2NjY2Y3MjliNzM2NzI2MmM1MDEwZTg4NmI0YjJkZTQ3ZGEzODI5MzI4ZGRjNDJlMGY0NjdjOWMiLCJrZXlfaWQiOjIwfQ%3D%3D&_=0.2030399449036786");
// 連線這個HTTP資源
HttpURLConnection openConnection= (HttpURLConnection) url.openConnection();
InputStream inputStream = openConnection.getInputStream();
FileOutputStream out=new FileOutputStream("C:\\Users\\15512\\Desktop\\mu.txt");
byte[] bytes = new byte[1024];
int len;
while((len=inputStream.read(bytes))!=-1){
out.write(bytes,0,len);
}
out.close();
inputStream.close();
openConnection.disconnect();
}
}