Skip to content

网络编程

一、网络编程概述

网络编程:网络互联的计算机实现数据交换

1、网络编程三要素

1)IP

IP:网络中设备的唯一标识

cmd -> ipconfig:查看本机ip cmd -> ping ip地址:检查网络是否连通

127.0.0.1:回送地址,可以代表本机

2)端口

端口:设备应用程序的唯一标识

理论取值:0 ~ 65535

建议取值:1024以后,避开知名端口号

3)协议

协议:计算机网络通信和连接的规则

  1. UDP:用户数据报协议
    1. 特点:你发你的,我收我的,不区分客户端服务器
  2. TCP:传输控制协议
    1. 特点:商量好再传输
    2. 三次握手
      1. 客户端 -> 服务器:连接请求
      2. 服务器 -> 客户端:收到请求
      3. 客户端 -> 服务器:确认连接

二、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传输对象

  1. 无参构造:DatagramSocket()
  2. 发送数据包:public void send(DatagramPacket p)
  3. 释放资源:public void close()

3)DatagramPacket数据包

数据包构造方法:public DatagramPacket(byte buf[], int length, InetAddress address, int port)

  1. byte buf[]:字节数组
  2. length:字节长度(bus.length)
  3. InetAddress address:InetAddress.getByName(String ip)
  4. 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传输对象

  1. 带参构造:DatagramSocket(int port)
  2. 接收数据包:public synchronized void receive(DatagramPacket p)

3)DatagramPacket数据包

  1. 空数据包构造方法:public DatagramPacket(byte buf[], int length)
  2. 获取数据:public synchronized byte[] getData()
  3. 获取数据长度: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()

Released under the MIT License.