Java中的TCP/IP与UDP协议Socket入门

news2024/11/15 14:08:46

Socket:

简单地说Socket就相当于是一家快递公司包括:

寄件人:

1.包裹放快递盒里(数据打包:DatagramSocket)

2.运输快递(发送数据)

3.付钱回家(释放资源)

收件人:

1.收到包裹(接受数据)

2.打开包裹(解析数据)

UDP和Socket:

基于UDP协议的sokect实现发送数据:

package Text;

import java.io.IOException;
import java.net.*;

public class Test01UDP {
    public static void main(String[] args) throws IOException {

        //发送数据
        //1.创建DatagramSocket对象
        //细节:
        //绑定端口:通过这个端口往外发送
        //空参:所有可用的端口号中随机一个进行使用
        //有参:指定端口号进行绑定
        DatagramSocket datagramSocket = new DatagramSocket();

        //2.打包数据
        String str = "好帅啊小哥哥";
        //把数据放数组里面
        byte[] bytes = str.getBytes();
        //确定发送地址
        InetAddress address = InetAddress.getByName("127.0.0.1");
        //端口号的作用是指定数据报包要发送到的目标端口。不是我的发送端口
        int port = 10086;

        DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,address,port);

        //发送数据
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
    }
}

接收数据:

注意:一定要先运行接收方, 在 UDP 通信中,接收方需要在指定的端口上监听和等待数据包。如果接收方没有启动并且没有监听该端口,发送方发送的数据包将无法到达任何地方,因为没有程序在接收这些数据包。

  public static void main(String[] args) throws IOException {
        //创建快递公司对象
        DatagramSocket ds = new DatagramSocket(10086);

        //接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
        //这个recive是一个阻塞方法,它会等到接收后才会继续运行
        ds.receive(dp);

        //3.解析数据包
        byte[] data = dp.getData();
        int len = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();
        System.out.println("接收到数据"+new String(data,0,len));
        System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发出的");

        //4.释放资源,关闭快递公司
        ds.close();
    }
}

UDP聊天室:循环的发送字

当输入886的时候就结束会话,否则就一直可以发送,并且支持多人

注意:

我没找到那个允许运行多次的选项,在编辑设置里面,所以只能发送方不能重复运行

直到发送的数字为886结束。

每次调用 ds.receive(dp) 时,DatagramSocket 会将接收到的数据写入到 dpbytes 数组中。所以不用把这个byte数组也放到循环中

发送端:
package Chatting;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class Test01UDP {
    public static void main(String[] args) throws IOException {

        //发送数据
        //1.创建DatagramSocket对象
        //细节:
        //绑定端口:通过这个端口往外发送
        //空参:所有可用的端口号中随机一个进行使用
        //有参:指定端口号进行绑定
        DatagramSocket datagramSocket = new DatagramSocket();

        //2.打包数据
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入您要说的话");
            String str = scanner.nextLine();
            if ("886".equals(str)){
                break;
            }
            //把数据放数组里面
            byte[] bytes = str.getBytes();
            //确定发送地址
            InetAddress address = InetAddress.getByName("127.0.0.1");
            //端口号的作用是指定数据报包要发送到的目标端口。不是我的发送端口
            int port = 10086;

            DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,address,port);

            //发送数据
            datagramSocket.send(datagramPacket);
        }

        datagramSocket.close();
    }
}
接收端:
package Chatting;

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

public class Test02Recive {
    public static void main(String[] args) throws IOException {
        //创建快递公司对象
        DatagramSocket ds = new DatagramSocket(10086);
        //接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);

        while (true){

            //这个recive是一个阻塞方法,它会等到接收后才会继续运行
            ds.receive(dp);

            //3.解析数据包
            byte[] data = dp.getData();
            int len = dp.getLength();
            InetAddress address = dp.getAddress();
            int port = dp.getPort();
            System.out.println("接收到数据"+new String(data,0,len));
            System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发出的");
        }

    }
}

UDP的三种通信方式:

1.单播

2.组播

组播地址:224.0.0.0-239.255.255.255

其中224.0.0.0-224.0.255为预留的组播地址

3.广播

广播地址:255.255.255.255

TCP的通信:

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,通信之前要保证连接已建立。

通过Socket产生I/O流来进行网络通信。

发送端:
    public static void main(String[] args) throws IOException {
        //发送端,发送数据
        //1.创建Socket对象
        //细节:在创建对象的同时会连接服务器
        //如果连不上,代码会报错
        Socket socket = new Socket("127.0.0.1",10001);
        //可以从连接通道中获取输出流
        OutputStream outputStream = socket.getOutputStream();
        //写出数据
        outputStream.write("chenmengyu".getBytes());
        //释放资源
        outputStream.close();
        socket.close();
    }

接收端:
  public static void main(String[] args) throws IOException {
        //TCP协议,接收数据
        //1.创建对象ServerSocker
        ServerSocket ss = new ServerSocket(10001);
        //2.监听客户端的连接
        Socket s = ss.accept();

        //3.从连接通道中获取输入流读取数据
        InputStream inputStream = s.getInputStream();
        int b;
        while ((b = inputStream.read())!=-1){
            System.out.println((char)b);
        }
        //4.释放资源
        s.close();
        ss.close();
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.初识ChatGPT:AI聊天机器人的革命(1/10)

引言 在当今的数字化世界中,人工智能(AI)正以其独特的方式重塑我们的生活和工作。其中,AI聊天机器人作为人机交互的前沿技术,已经成为企业与客户沟通、提供个性化服务的重要工具。这些机器人通过模拟人类的对话方式&a…

Android 存储之 SharedPreferences 框架体系编码模板

一、SharedPreferences 框架体系 1、SharedPreferences 基本介绍 SharedPreferences 是 Android 的一个轻量级存储工具,它采用 key - value 的键值对方式进行存储 它允许保存和读取应用中的基本数据类型,例如,String、int、float、boolean …

RKNPU2项目实战【1】 ---- YOLOv5实时目标分类

目录 目标 一、python接口下实现yolov5模型在开发板上的部署 1.1 在rknntoolkit2环境下模拟实现yolov5模型在RK3588开发板上的推理测试 1.2 在rknntoolkit2环境下实现模型在RK3588开发板上的连板推理测试(模型运行在NPU上) 1.3 在rknntoolkitlite2环…

使用llamaindexLLM大模型构建一个可离线可在线可异步扩展信息的RAG智能问答系统

之前对一件事很好奇,为什么去年训练的大模型可以回答今天的新闻内容。答案是使用了知识扩展系统。基本原理是把参考答案和问题一同提给大模型,给他充分的参考信息做回复编辑。 本文教你完成离线版本的智能问答系统搭建。 最近在疯狂找下家,本人精通图形渲染和ai,求捞啊! …

没参加会议,还要 30000 字的会议材料写总结?用好 AI工具,30 分钟堵住领导的嘴

前段时间本来要参加总公司的重要会议,但由于临时出差错过了。 分公司老总,给了我 10 份会议材料内容,让我学习,并在节后梳理出要点。 结果,一过节就全都给忘记了,咋办?听说最近Kimi出了新玩法…

k8s 部署 jenkins【详细步骤】

文章目录 部署介绍部署步骤第 1 步:创建 namespace第 2 步:创建 ServiceAccount第 3 步:创建持久卷第 4 步:创建 Deployment第 5 步:创建 Service第 6 步:浏览器访问 Jenkins第 7 步:修改默认时区参考⭐ 本文目标:在 k8s 集群中部署一个 jenkins。 部署介绍 🚀 在 K…

内推|京东|后端开发|运维|算法...|北京 更多岗位扫内推码了解,直接投递,跟踪进度

热招岗位 更多岗位欢迎扫描末尾二维码,小程序直接提交简历等面试。实时帮你查询面试进程。 安全运营中心研发工程师 岗位要求 1、本科及以上学历,3年以上的安全相关工作经验; 2、熟悉c/c、go编程语言之一、熟悉linux网络编程和系统编程 3、…

coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

为什么企业数据资产入表实践少?

​在财政部会计司发布暂行规定之后,数据资产化或者数据要素市场进入加速期。 会计司在22年12月1号首先发布征求意见,经过半年时间迅速迭代后,正式发布了暂行规定。文件第8条规定了国家实行统一的会计制度,任何相关的企业组织都必须…

【网络安全】调试模式获取敏感数据

未经许可,不得转载。 文章目录 漏洞原因步骤PHPPythonASPNode.js漏洞原因 当开发者忘记在生产环境中禁用调试模式,应用在发生错误时,可能会输出详细的错误信息。这些错误信息(比如“error title”或堆栈跟踪)通常包含了应用程序的内部结构、配置甚至数据库连接信息等敏感…

Windows自动化程序开发指南

自动化程序的概念 “自动化程序”指的是通过电脑编程来代替人类手工操作的一类程序或软件。这类程序具有智能性高、应用范围广的优点,但是自动化程序的开发难度大、所用技术杂。 本文对自动化程序开发的各个方面进行讲解。 常见的处理对象 自动化程序要处理的对…

公认最好的跑步耳机分享,选购骨传导运动耳机需注意的五大陷阱!

跑步,不仅是一种锻炼身体的方式,更是一种生活态度的体现。它让我们在汗水中释放压力,在节奏中感受生命的律动。而音乐,作为跑步时的完美伴侣,能够激发我们的运动潜能,让我们的跑步之旅更加愉悦。因此&#…

软件测试自动化面试题(含答案)

1.如何把自动化测试在公司中实施并推广起来的? 选择长期的有稳定模块的项目 项目组调研选择自动化工具并开会演示demo案例,我们主要是演示selenium和robot framework两种。 搭建自动化测试框架,在项目中逐步开展自动化。 把该项目的自动化…

示波器基础知识汇总(2)

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 送给大学毕业后找不到奋斗方向的你(每周不定时更新) 中国计算机技术职业资格网 上海市工程系列计算机专…

SD-WAN解决企业远程服务难题

在当今数字化和全球化的商业环境中,企业不再受限于地理位置。远程工作和分布式团队已成为常态,但随之而来的是对网络连接的更高需求。本文将讨论企业远程服务中的挑战,并介绍一个解决这些挑战的有效方案——SD-WAN。 随着远程工作的增加&…

Buzzer:一款针对eBPF的安全检测与模糊测试工具

关于Buzzer Buzzer是一款功能强大的模糊测试工具链,该工具基于Go语言开发,可以帮助广大研究人员简单高效地开发针对eBPF的模糊测试策略。 功能介绍 下面给出的是当前版本的Buzzer整体架构: 元素解析: 1、ControlUnit&#xff1a…

查看元神操作系统的版本

1. 背景 本文通过元神操作系统的API调用来获取元神系统的版本,并显示在屏幕上。 2. 方法 (1)编写程序 本例先设置系统调用的参数:第一个参数设置为API_OS_VER,表示获取元神操作系统的版本号;第二个参数…

pdf怎么压缩小一些?推荐的几种PDF压缩方法

pdf怎么压缩小一些?在工作中,我们经常处理PDF文件。大文件不仅存储麻烦,还会拖慢传输速度。因此,我们通常希望将这些文件压缩成更小的尺寸。压缩后的文件更便于分享和管理,适用于云存储、社交媒体或其他在线平台&#…

安装node版本管理工具(nvm)、利用nvm安装node

https://github.com/coreybutler/nvm-windows/releases 下载nvm-setup.zip 选择nvm安装路径,注意路径不要有空格和中文。 选择nodejs的安装路径,这里是在E:\nodejs位置创建一个快捷方式,真正的文件在nvm文件下的版本号文件中 点击next&a…

容性负载箱如何测量电容器的容量、电压、泄漏电流和ESR等参数?

容性负载箱是用于测量电容器参数的重要设备。它的主要功能是通过向电容器施加不同的负载,从而测量电容器的容量、电压响应、损耗等关键参数。 具体来说,容性负载箱可以通过以下方式测量电容器的各项参数: 1. 测量电容器的容量:容…