网络编程(网络编程概述)(理解)
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();
}
}
网络编程(练习)
客户端向服务器写字符串(键盘录入),服务器(多线程)将字符串反转后写回,客户端再次读取到是反转后的字符串
网络编程(练习)
客户端向服务器上传文件
发表回复