Java网络编程 、UDP、TCP、Socket通信

这个是第一篇,我先写udp,

首先我解释一下这个的特点是什么,他的特点主要是:

我发送消息之后就不管这个消息的任何情况,也就是,我只要把这个消息发送出去就不管了

这个是大白话的解释,具体的就是消息效率高,不可靠,主要应用场景是语音和视频通话,因为这个udp发送消息是以包的形式发送的,并且一个包的具体大小是64kb,并且不回超过 这个64kb

//下面我来演示意思具体的java代码是怎么写的

//首页得准备两个包,一个是客户端 一个是服务器端,准备两个,由于我是一台电脑,这样就不用考虑ip地址了,那我先一个怎么获取本机ip地址和本机的主机名字

java 复制代码
package clien;

import java.net.InetAddress;

public class indetAddress {
    public static void main(String[] args) throws Exception {
        //获取ip地址
        InetAddress localHost = InetAddress.getLocalHost();
        String hostAddress = localHost.getHostAddress();
        System.out.println("ip地址"+hostAddress);
        String hostName = localHost.getHostName();
        System.out.println("主机名:"+hostName);
    }
}

好,我现在来写客户端和服务器端,我写截一个图这样看着方便

那我写代码客户端

java 复制代码
package clien;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;

/**
 * 客户端
 */
public class ClientSocket {
    public static void main(String[] args) throws Exception {
        //创建客户端
        DatagramSocket datagramSocket = new DatagramSocket();
        //创建发消息的容器
        //byte buf[],  //创建字节数组
        //int length,  //数据的长度
        //InetAddress address,  //ip地址
        //int port  //端口号
        byte[] bytes = "你好服务端".getBytes(StandardCharsets.UTF_8);
        DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,InetAddress.getLocalHost(),9999);
        //发送消息
        datagramSocket.send(datagramPacket);
        System.out.println("客户端发送成功");
        //关闭释放资源
        datagramSocket.close();

    }
}

在写服务器端

java 复制代码
package server;

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

/**
 * 服务器端
 */
public class ServerSocket {
    public static void main(String[] args) throws Exception{
        //创建服务器端
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        //byte buf[], int length,
        //用于接受
        byte[] bytes=new byte[1024*64]; //最大不会超过64kb
        DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);
        System.out.println("服务开启");
        //要显示数据 拿到数据
        datagramSocket.receive(datagramPacket);
        //这个是拿到数据的长度
        int length = datagramPacket.getLength();
        //这个是显示的数据
        String data = new String(bytes, 0, length);
        //获取客户端的ip地址
        String hostAddress = datagramPacket.getAddress().getHostAddress();
        //获取客户端的名字
        String hostName = datagramPacket.getAddress().getHostName();
        System.out.println("客服端发送过的数据:"+data+"\n数据长度:"+length+"\n客户端的ip地址:"+hostAddress+"\n客户端的名字:"+hostName);
        datagramSocket.close();
    }
}

好了,我先写这么多,后面还有tcp,等我回头发布

相关推荐
Monodye6 分钟前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
一丝晨光12 分钟前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
无名指的等待71236 分钟前
SpringBoot中使用ElasticSearch
java·spring boot·后端
汀、人工智能38 分钟前
报错error: RPC failed,curl 16 Error in the HTTP2 framing layer解决方法
网络·git·网络协议·rpc
qq 17780362243 分钟前
智能新时代,游戏盾守护顺畅体验
运维·服务器·网络·游戏·云计算·ddos·ip
Tatakai251 小时前
Mybatis Plus分页查询返回total为0问题
java·spring·bug·mybatis
武子康1 小时前
大数据-133 - ClickHouse 基础概述 全面了解
java·大数据·分布式·clickhouse·flink·spark
.生产的驴1 小时前
SpringBoot 消息队列RabbitMQ 消费者确认机制 失败重试机制
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
Code哈哈笑1 小时前
【C++ 学习】多态的基础和原理(10)
java·c++·学习
chushiyunen2 小时前
redisController工具类
java