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,等我回头发布

相关推荐
网络小白不怕黑2 分钟前
华为交换机堆叠与集群技术深度解析附带脚本
网络·华为
安之若素^5 分钟前
启用不安全的HTTP方法
java·开发语言
ruanjiananquan9911 分钟前
c,c++语言的栈内存、堆内存及任意读写内存
java·c语言·c++
chuanauc38 分钟前
Kubernets K8s 学习
java·学习·kubernetes
一头生产的驴1 小时前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
YuTaoShao1 小时前
【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
java·算法·leetcode·矩阵
zzywxc7871 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
靡樊1 小时前
NAT、代理服务、内网穿透
网络·内网穿透·nat·代理服务·内网打洞
YuTaoShao3 小时前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展
程序员张33 小时前
SpringBoot计时一次请求耗时
java·spring boot·后端