java网络编程(TCP UDP)

一 概述

1.网络编程:实现不同设备间的信息交互
2.网络通信三要素
  1. IP地址:网络中设备的唯一表示
  2. 端口号: 一台设备中标识不同的进程 (有效端口0~65535,系统使用0~1024)
  3. 传输协议:常用TCP,UDP协议
    • UDP: 数据包,无连接,不可靠,效率高
    • TCP:有连接(三次握手),可靠,可进行大量数据传输,效率低
      三次握手图解: ![这里写图片描述](https://img-blog.csdn.net

二 实例

核心对象InetAddress
package com.blueSky;

import java.net.InetAddress;

public class SocketTest {
    public static void main(String[] args) throws Exception {
        InetAddress address = InetAddress.getByName("lenovo-PC"); //通过静态方法获得IntAddress对象
        System.out.println(address);

        String hostName = address.getHostName(); //获得主机名
        String hostAddress = address.getHostAddress();      //获得Ip地址
        System.out.println(hostName);
        System.out.println(hostAddress);

    }
}

一 UDP编程

发送端

  • 代码逻辑
    1.创建发送端Socket
    2.获得要发送的数据
    3.打包数据
    4.发送数据
    5.释放资源
package com.blueSky;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSender {
    public static void main(String[] args) throws Exception {
        DatagramSocket datagramSocket = new DatagramSocket(7777); //创建DatagramSocket对象(设置发送端端口为7777)
        //2.获得数据
        String message = "UDP编程";
        //处理数据
        byte[] msgBytes = message.getBytes();
        int length = msgBytes.length;
        InetAddress address = InetAddress.getByName("lenovo-PC");
        int port = 8888;   //接收端的端口号
        //3.打包对象(需要给包裹贴标签 信息 + ip + port)
        DatagramPacket datagramPacket = new DatagramPacket(msgBytes, length, address, port);
        //4.发送数据
        datagramSocket.send(datagramPacket);
        //5.释放资源
        datagramSocket.close();

    }
}

接收端

逻辑:
1.编写接收端Socket对象
2.从缓冲区接收数据包
3.解析包(拆包)
4.释放资源

package com.blueSky;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDPReceiver {
    public static void main(String[] args) throws Exception {
        //1.创建接收端Socket对象(设置端口号为8888)
        DatagramSocket datagramSocket = new DatagramSocket(8888);
        //2.接收数据(调用方法从缓存区中获取数据)
        //使用字节(byte)数组来接收数据
        byte[] msgReceive = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(msgReceive,msgReceive.length);
        datagramSocket.receive(datagramPacket);  //该方法有个阻塞,接收不到数据就会被阻塞,接收到数据继续运行

        //3.解析数据(拆包,方法来自dataGramPackage对象)
        InetAddress address = datagramPacket.getAddress(); // 获得InetAddress对象
        String hostAddress = address.getHostAddress();    //获得发送端主机名
        String hostName = address.getHostName();          //获得发送端Ip地址
        byte[] data = datagramPacket.getData(); //获得发送的内容
        int length = datagramPacket.getLength();//获得发送数据(字节)的具体长度
        System.out.println(hostAddress);
        System.out.println(hostName);
        //输出byte[]类型数据(转成字符串)
        String dataString = new String(data,0,length,"UTF-8"); 
        System.out.println(dataString);

        //4.释放资源
        datagramSocket.close();
    }
}

java网络编程(TCP UDP)_第1张图片

java网络编程(TCP UDP)_第2张图片

你可能感兴趣的:(java)