共计 4862 个字符,预计需要花费 13 分钟才能阅读完成。
网络编程(网络编程概述)(理解)
A: 计算机网络
是指将地理位置不同的具备独立性能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协定的治理和协调下,实现资源共享和信息传递的计算机系统。
B: 网络编程
就是用来实现网络互连的不同计算机上运行的程序间能够进行数据交换。
网络编程(网络编程三要素之 IP 概述)(把握)
每个设施在网络中的惟一标识
每台网络终端在网络中都有一个独立的地址,咱们在网络中传输数据就是应用这个地址。
ipconfig:查看本机 IP192.168.12.42
ping:测试连贯 192.168.40.62
本地回路地址:127.0.0.1 255.255.255.255 是播送地址
IPv4:4 个字节组成,4 个 0 -255。大略 42 亿,30 亿都在北美,亚洲 4 亿。2011 年初曾经用尽。
IPv6:8 组,每组 4 个 16 进制数。
1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f
1a2b::aaaa:0000:0000:0000:aabb:1f2f
1a2b:0000:aaaa::aabb:1f2f
1a2b:0000:aaaa::0000:aabb:1f2f
1a2b:0000:aaaa:0000::aabb:1f2f
网络编程(网络编程三要素之端口号概述)(把握)
每个程序在设施上的惟一标识
每个网络程序都须要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。
端口号范畴从 0 -65535
编写网络应用就须要绑定一个端口号,尽量应用 1024 以上的,1024 以下的基本上都被零碎程序占用了。
罕用端口
mysql: 3306
oracle: 1521
web: 80
tomcat: 8080
QQ: 4000
feiQ: 2425
网络编程(网络编程三要素协定)(把握)
为计算机网络中进行数据交换而建设的规定、规范或约定的汇合。
UDP
面向无连贯,数据不平安,速度快。不辨别客户端与服务端。
TCP
* 面向连贯(三次握手),数据安全,速度略低。分为客户端和服务端。
三次握手: 客户端先向服务端发动申请, 服务端响应申请, 传输数据
网络编程(Socket 通信原理图解)(理解)
A:Socket 套接字概述:
网络上具备惟一标识的 IP 地址和端口号组合在一起能力形成惟一能辨认的标识符套接字。
通信的两端都有 Socket。
网络通信其实就是 Socket 间的通信。
数据在两个 Socket 间通过 IO 流传输。
Socket 在应用程序中创立,通过一种绑定机制与驱动程序建设关系,通知本人所对应的 IP 和 port。
网络编程(UDP 传输)(理解)
1. 发送 Send
创立 DatagramSocket, 随机端口号
创立 DatagramPacket, 指定数据, 长度, 地址, 端口
应用 DatagramSocket 发送 DatagramPacket
敞开 DatagramSocket
2. 接管 Receive
创立 DatagramSocket, 指定端口号
创立 DatagramPacket, 指定数组, 长度
应用 DatagramSocket 接管 DatagramPacket
敞开 DatagramSocket
从 DatagramPacket 中获取数据
3. 接管方获取 ip 和端口号
String ip = packet.getAddress().getHostAddress();
int port = packet.getPort();
网络编程(UDP 传输优化)
接收端 Receive
DatagramSocket socket = new DatagramSocket(6666); // 创立 socket 相当于创立码头
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); // 创立 packet 相当于创立集装箱
while(true) {socket.receive(packet); // 接管货物
byte[] arr = packet.getData();
int len = packet.getLength();
String ip = packet.getAddress().getHostAddress();
System.out.println(ip + ":" + new String(arr,0,len));
}
发送端 Send
DatagramSocket socket = new DatagramSocket(); // 创立 socket 相当于创立码头
Scanner sc = new Scanner(System.in);
while(true) {String str = sc.nextLine();
if("quit".equals(str))
break;
DatagramPacket packet = // 创立 packet 相当于创立集装箱
new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
socket.send(packet); // 发货
}
socket.close();
网络编程(UDP 传输多线程)
A 发送和接管在一个窗口实现
public class Demo3_MoreThread {
/**
* @param args
*/
public static void main(String[] args) {new Receive().start();
new Send().start();
}
}
class Receive extends Thread {public void run() {
try {DatagramSocket socket = new DatagramSocket(6666); // 创立 socket 相当于创立码头
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); // 创立 packet 相当于创立集装箱
while(true) {socket.receive(packet); // 接管货物
byte[] arr = packet.getData();
int len = packet.getLength();
String ip = packet.getAddress().getHostAddress();
System.out.println(ip + ":" + new String(arr,0,len));
}
} catch (IOException e) {e.printStackTrace();
}
}
}
class Send extends Thread {public void run() {
try {DatagramSocket socket = new DatagramSocket(); // 创立 socket 相当于创立码头
Scanner sc = new Scanner(System.in);
while(true) {String str = sc.nextLine();
if("quit".equals(str))
break;
DatagramPacket packet = // 创立 packet 相当于创立集装箱
new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
socket.send(packet); // 发货
}
socket.close();} catch (IOException e) {e.printStackTrace();
}
}
}
网络编程(UDP 聊天图形化界面)
网络编程(UDP 聊天发送性能)
网络编程(UDP 聊天记录性能)
网络编程(UDP 聊天清屏性能)
网络编程(UDP 聊天触动性能)
网络编程(UDP 聊天快捷键和代码优化)
网络编程(UDP 聊天生成 jar 文件)
网络编程(TCP 协定)(把握)
1. 客户端
创立 Socket 连贯服务端 (指定 ip 地址, 端口号) 通过 ip 地址找对应的服务器
调用 Socket 的 getInputStream()和 getOutputStream()办法获取和服务端相连的 IO 流
输出流能够读取服务端输入流写出的数据
输入流能够写出数据到服务端的输出流
2. 服务端
创立 ServerSocket(须要指定端口号)
调用 ServerSocket 的 accept()办法接管一个客户端申请,失去一个 Socket
调用 Socket 的 getInputStream()和 getOutputStream()办法获取和客户端相连的 IO 流
输出流能够读取客户端输入流写出的数据
输入流能够写出数据到客户端的输出流
网络编程(TCP 协定代码优化)
客户端
Socket socket = new Socket("127.0.0.1", 9999); // 创立 Socket 指定 ip 地址和端口号
InputStream is = socket.getInputStream(); // 获取输出流
OutputStream os = socket.getOutputStream(); // 获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintStream ps = new PrintStream(os);
System.out.println(br.readLine());
ps.println("我想报名待业班");
System.out.println(br.readLine());
ps.println("爷不学了");
socket.close();
服务端
ServerSocket server = new ServerSocket(9999); // 创立服务器
Socket socket = server.accept(); // 承受客户端的申请
InputStream is = socket.getInputStream(); // 获取输出流
OutputStream os = socket.getOutputStream(); // 获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintStream ps = new PrintStream(os);
ps.println("欢送征询传智播客");
System.out.println(br.readLine());
ps.println("报满了, 请报下一期吧");
System.out.println(br.readLine());
server.close();
socket.close();
26.18_网络编程(服务端是多线程的)(把握)
ServerSocket server = new ServerSocket(9999); // 创立服务器
while(true) {final Socket socket = server.accept(); // 承受客户端的申请
new Thread() {public void run() {
try {BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(“欢送征询传智播客”);
System.out.println(br.readLine());
ps.println(“报满了, 请报下一期吧”);
System.out.println(br.readLine());
socket.close();} catch (IOException e) {e.printStackTrace();
}
}
}.start();}
}
网络编程(练习)
客户端向服务器写字符串 (键盘录入), 服务器(多线程) 将字符串反转后写回, 客户端再次读取到是反转后的字符串
网络编程(练习)
客户端向服务器上传文件