网络编程:
在网络通信协议下,不同计算机上运行的程序,进行的数据传输。
常见软件架构:
BS(需浏览器)
CS(需下载客户端,远程有服务器端)
网络编程三要素:
1.IP:设备在网络中的地址,是唯一标识
2.端口号:应用程序在设备中唯一的标识
3.协议:数据在网络中传输的规则
IP:
IPv4:采用32位地址长度,分成4组,点分十进制表示法,2019年所有ip已经用完了
IPv6:采用128位地址长度,分成8组,冒分十六进制表示法
IPv4的地址分类:
公网地址(万维网使用)和私有地址(局域网使用)
特殊IP:
127.0.0.1(localhost)本机IP 本地回环地址
常见CMD:
ipconfig:查看本机IP地址
ping:检查网络是否连通
InetAddress的使用:
java
import java.net.InetAddress;
import java.net.UnknownHostException;
public class sa {
public static void main(String[] args) throws UnknownHostException {
InetAddress aa = InetAddress.getByName("192.168.130.197");
System.out.println(aa);
String hostName = aa.getHostName();
System.out.println(hostName);
String hostAddress = aa.getHostAddress();
System.out.println(hostAddress);
}
}
端口号:
应用程序在设备中的唯一的标识。
由两个字节表示的整数,范围0~65535
一个端口号只能被一个应用程序使用
协议:
计算机网络中,连接和通信的规则称为网络通信协议。
UDP协议:
用户数据报协议,面向无连接,速度快。
java
import java.io.IOException;
import java.net.*;
public class o {
public static void main(String[] args) throws IOException {
//发送数据
//1.创建DatagramSocket对象
DatagramSocket ds=new DatagramSocket();
//2.打包数据
String str="hello";
byte[] bytes = str.getBytes();
InetAddress address=InetAddress.getByName("127.0.0.1");
int port=10086;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
//3.发送数据
ds.send(dp);
//4.释放数据
ds.close();
}
}
java
import java.io.IOException;
import java.net.*;
public class o {
public static void main(String[] args) throws IOException {
//接收数据
//1.创建DatagramSocket对象
DatagramSocket ds=new DatagramSocket(10086);
//2.接收数据包
byte[] bytes = new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
//3.解析数据包
byte[] data = dp.getData();
int len= dp.getLength();
InetAddress address = dp.getAddress();
int port=dp.getPort();
System.out.println("接收到数据"+new String(data,0,len));
System.out.println("该数据由"+address+"中的"+port+"端口运行出来");
//4.释放资源
ds.close();
}
}
聊天室练习代码
java
package nih;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class o1 {
public static void main(String[] args) throws IOException {
//发送数据
//1.创建DatagramSocket对象
DatagramSocket ds=new DatagramSocket();
//2.打包数据
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("请输入:");
String str= sc.nextLine();
if("886".equals(str)){
break;
}
byte[] bytes = str.getBytes();
InetAddress address=InetAddress.getByName("127.0.0.1");
int port=10086;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
//3.发送数据
ds.send(dp);
}
//4.释放数据
ds.close();
}
}
java
package nih;
import java.io.IOException;
import java.net.*;
public class o {
public static void main(String[] args) throws IOException {
//接收数据
//1.创建DatagramSocket对象
DatagramSocket ds=new DatagramSocket(10086);
//2.接收数据包
byte[] bytes = new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
while (true){
ds.receive(dp);
//3.解析数据包
byte[] data = dp.getData();
int len= dp.getLength();
InetAddress address = dp.getAddress();
int port=dp.getPort();
System.out.println("接收到数据"+new String(data,0,len));
System.out.println("该数据由"+address+"中的"+port+"端口运行出来");
}
}
}
UDP的三种通信方式:
- 单播(上面写的都是)
2.组播
MulticastSocket
3.广播
改成''255.255.255.255''
TCP协议:
传输控制协议,面向连接,速度慢。
通过Socket产生IO流来进行网络通信。
java
package nih;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
//发送
//1.创建Socket对象
Socket s=new Socket("127.0.0.1",10000);
//2.可以从连接通道中获取输出流
OutputStream outputStream = s.getOutputStream();
//写出数据
outputStream.write("hello".getBytes());
//3.释放资源
outputStream.close();
s.close();
}
}
java
package nih;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
//接收数据
//1.创建ServerSocket
ServerSocket ss=new ServerSocket(10000);
//2.监听客户端的链接
Socket accept = ss.accept();
//3.从连接通道中获取输入流读取数据
InputStream inputStream = accept.getInputStream();
int b;
while ((b=inputStream.read())!=-1){
System.out.println((char) b);
}
//4.释放资源
inputStream.close();
ss.close();
}
}
TCP通信三次握手:
保证连接建立
TCP通信四次挥手:
确保连接断开,且数据处理完毕