网络编程
一、网络编程概述
网络编程:网络互联的计算机实现数据交换
1、网络编程三要素
1)IP
IP:网络中设备的唯一标识
cmd -> ipconfig:查看本机ip cmd -> ping ip地址:检查网络是否连通
127.0.0.1:回送地址,可以代表本机
2)端口
端口:设备应用程序的唯一标识
理论取值:0 ~ 65535
建议取值:1024以后,避开知名端口号
3)协议
协议:计算机网络通信和连接的规则
- UDP:用户数据报协议
- 特点:你发你的,我收我的,不区分客户端服务器
- TCP:传输控制协议
- 特点:商量好再传输
- 三次握手
- 客户端 -> 服务器:连接请求
- 服务器 -> 客户端:收到请求
- 客户端 -> 服务器:确认连接
二、UDP
1、UDP发送数据
1)步骤
java
// 1.创建发送端的Socket对象(DatagramSocket)
DatagramSocket ds = new DatagramSocket();
// 2.创建数据,并把数据打包
DatagramPacket dp = new DatagramPacket("wmh".getBytes(), "wmh".getBytes().length,InetAddress.getByName("192.168.1.148"),10010);
// 3.调用DatagramSocket对象的方法发送数据
ds.send(dp);
// 4.关闭发送端
ds.close();
2)DatagramSocket传输对象
- 无参构造:
DatagramSocket()
- 发送数据包:
public void send(DatagramPacket p)
- 释放资源:
public void close()
3)DatagramPacket数据包
数据包构造方法:public DatagramPacket(byte buf[], int length, InetAddress address, int port)
- byte buf[]:字节数组
- length:字节长度(
bus.length
) - InetAddress address:
InetAddress.getByName(String ip)
- port:端口号
2、UDP接收数据
1)步骤
java
//1.创建接收端的Socket对象(DatagramSocket)
DatagramSocket ds = new DatagramSocket(10010);
//2.创建一个数据包,用于接收数据
DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
//3.调用DatagramSocket对象的方法接收数据
ds.receive(dp);
//4.解析数据包,并把数据在控制台显示
System.out.println(new String(dp.getData(),0,dp.getLength()));
//5.释放资源
ds.close();
2)DatagramSocket传输对象
- 带参构造:
DatagramSocket(int port)
- 接收数据包:
public synchronized void receive(DatagramPacket p)
3)DatagramPacket数据包
- 空数据包构造方法:
public DatagramPacket(byte buf[], int length)
- 获取数据:
public synchronized byte[] getData()
- 获取数据长度:
public synchronized int getLength()
三、TCP
1、TCP发送数据
1)步骤
java
Socket s = new Socket("192.168.1.148",10010);
OutputStream os = s.getOutputStream();
os.write("hello".getBytes());
os.close();
2)Socket流套接字
构造方法:public Socket(String host, int port)
获取输出流:public OutputStream getOutputStream()
2、TCP接收数据
1)步骤
java
ServerSocket ss = new ServerSocket(10010);
Socket s = ss.accept();
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys);
System.out.println(new String(bys,0,len));
is.close();
s.close();
2)ServerSocket服务端套接字
构造方法:public ServerSocket(int port)
监听,返回Socket对象:public Socket accept()
3)Socket流套接字
获取输入流:public InputStream getInputStream()