JavaAPI之网络编程UDP/TCP简述及示例

rsyslog交叉编译(armv7、armv8、aarch64、arm32平台通用) 该文档描述了如何交叉编译rsyslog到arm64嵌入式平台。 阅读详情

网络通信三要素

1、 IP地址

2、 端口号:用于标识进程的地址,不同的进程端口号不同,同一台计算机端口号不可重复

3、 信息传输协议:即计算机通信规则

a)      TCP协议:TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。

b)      UDP协议:UDP是一种简单的面向数据报、无连接、传输层协议,并且保留了信息边界。UDP不提供错误校正,不保证有序,无法去重复,没有流量控制和拥塞控制,不能保证数据一定到达目的地,但是可以通过校验和提供错误侦测。UDP提供的的是不可靠传输,因此要有应用层来提供这些功能。每个数据包大小限制在64k。

UDP开发步骤

Socket是网络编程提供的一种机制,通信的两端都要有Socket,网络通信其实就是Socket之间的通信。

服务端:

package UDPDemo;

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

public class Service {
    public static void main(String[] args) {
        //创建UDP服务端对象,必须指定端口号
        DatagramSocket ds=null;
        //定义接收的数据包
        DatagramPacket dp=null;
        try {
            ds=new DatagramSocket(10000);
            //定义接收数据的字节数组
            byte[] bytes=new byte[1024];
            dp=new DatagramPacket(bytes,bytes.length);
            //接收包
            ds.receive(dp);
            //获得数据包中的数据
            byte[] bytesData=dp.getData();
            //获得数据包长度
            int len=dp.getLength();
            //组装接收的数据
            String data=new String(bytesData,0,len);
            //在服务端打印数据
            System.out.println("客户端说:"+data);


            //当服务端接收到来自客户端的数据,纪要反馈消息给客户端,以下是反馈的消息
            //定义要返回的消息的字符串
            String str="您好,客户端,已收到您的消息!";
            //生成字节数组
            byte[] bytes1=str.getBytes();
            //将客户端对象重新定义
            ds=new DatagramSocket();
            //生成要发送给客户端的数据包,这里要指定字节数组,字节数组长度,IP和端口号
            dp=new DatagramPacket(bytes1,bytes1.length, InetAddress.getByName("127.0.0.1"),10001);
            //发送数据
            ds.send(dp);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (ds!=null){
                ds.close();
            }
        }
    }
}

客户端:

package UDPDemo;

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

public class Client {
    public static void main(String[] args) {
        //创建客户端的直接子对象
        DatagramSocket ds=null;
        try {
            ds=new DatagramSocket();
            String say="您好,服务端!";
            //生成发送内容的字节数组
            byte[] bytes=say.getBytes();
            //创建发送包,必须指定字节数组,数组长度,ip地址,端口号
            DatagramPacket dp=new DatagramPacket(bytes,bytes.length, InetAddress.getByName("127.0.0.1"),10000);
            //发送数据包
            ds.send(dp);


            //当服务端接收到客户端发送去数据包后,会向客户端返回消息,以下代码是用来接收服务端返回的消息
            //定义客户端端口号为100001
            ds=new DatagramSocket(10001);
            //定义用于接收服务端数据包的字节数组
            byte[] bytes1=new byte[1024];
            //定义接收数据包
            DatagramPacket dp1=new DatagramPacket(bytes1,bytes1.length);
            //接收服务端反馈的数据
            ds.receive(dp1);
            //组装接收的数据
            String str=new String(dp1.getData(),0,dp1.getLength());
            //在客户端控制台打印数据
            System.out.println("服务端说:"+str);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (ds!=null){
                ds.close();
            }
        }
    }
}

我们启动时,先启动服务端再启动客户端,运行结果:

服务端:


客户端:


TCP开发步骤

服务器端:

package TCPDemo;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Service {
    public static void main(String[] args) {
        //创建服务器端的服务套接字,指定端口号
        ServerSocket ss=null;
        try {
            ss=new ServerSocket(10000);
            //创建一个Socket,并等待客户端链接,直接到接受到了请求
            Socket s=ss.accept();

            //获得连接通道的输入输出流对象(字节流)
            OutputStream os=s.getOutputStream();
            InputStream is=s.getInputStream();
            //包装字节流
            BufferedReader br=new BufferedReader(new InputStreamReader(is));

            //读取数据
            String string=null;
            while ((string=br.readLine())!=null) {
                //在服务端控制台输出
                System.out.println("客户端说:" + string);
            }

            //当服务端接收到客户端发来的消息后,将反馈一个消息给客户端,以下代码实现此功能

            os.write("您好,客户端,消息已收到!".getBytes());
            //关闭输出流
            s.shutdownOutput();

            os.close();
            br.close();
            is.close();
            s.close();
            ss.close();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {

        }
    }
}

客户端:

package TCPDemo;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        //创建套接字对象,去请求服务器的ServletSocket
        Socket s=null;
        try {
            s=new Socket("127.0.0.1",10000);
            //获得连接通道的输入输出流对象(字节流)
            OutputStream os=s.getOutputStream();
            InputStream is=s.getInputStream();
            //包装字节输入流
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            //传输数据
            os.write("您好,服务端!".getBytes());
            //关闭输出流
            s.shutdownOutput();
            //当服务端接受到客户端发送的数据,会反馈给客户端消息。以下代码为客户端接收服务端反馈的消息
            String string=null;
            while ((string=br.readLine())!=null) {
                //在客户端控制台输出
                System.out.println("服务端说:" + string);
            }
            br.close();
            is.close();
            os.close();
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我们启动时,先启动服务端再启动客户端,运行结果:

服务端:


客户端:




iOS应用突然无法从App Store获取到内购(IAP)产品列表的解决 问题现象 Apple开发中,在应用中嵌入内购(IAP)功能的小伙伴们可能会发现,吃着火锅唱着歌,突然App就无法获取到产品列表了,而且产品请求操作并不会返回任何错误。 此时检查发现,并没有对App的内购逻辑做任何改动。 那么,这是什么原因导致的呢? Let’s find out!???? 问题分析 1. 排除其它原因 首先,你先得排除不是你IAP内购逻辑变更或其他原因导致的。 在SKProductsRequestDelegat代理实现的productsRequest方法里下断点: func produc 阅读详情

相关推荐

AutoCAD二次开发(.Net)之XData

对于CAD中的实体进行筛选等操作,常常会用到实体的XData属性,下面介绍一下实体的XData的增删改。 //XData的新增,修改跟新增一样,new一个ResultBuffer,赋值即可 Document doc=Application.DocumentManager.MdiActiveDocument; using (DocumentLock dl = doc.LockDocument()) { using (Transaction trans = doc.TransactionManager.S.

qq_21489689的博客 2593

网络套接字/TCP/UDP 以及常见API的详解

计算机之间的传输媒介是光信号和电信号,通过“频率“ 和 ”强弱“ 来表示0 和 1 这样的信息 。 要想传递各种不同的信息 ,就要提前约定好双方的数据格式。 协议——————一种双方的事先约定 TCP/IP五层或四层模型 物理层: 物理层负责光信号/电信号的传递方式, eg:双绞线网线 物理层的能力决定双绞线的最大传输能力, 集线器工作在物理层 数据链路层:负责数据帧的传送和识别。 eg:...

快乐星球 1909

十三、FLUENT蒸发/冷凝模型实战:从沸腾模拟到常温蒸发的UDF进阶

本文深入探讨FLUENT蒸发/冷凝模型的应用实践,从沸腾模拟到常温蒸发的UDF进阶。通过分析相变模型的核心逻辑、关键陷阱及UDF动态饱和温度场的实现,帮助工程师准确模拟不同场景下的蒸发/冷凝过程。结合太阳能蒸馏器等工程案例,提供优化方案和常见问题解决方案,显著提升模拟精度与效率。

weixin_42548893的博客 571

TCP/IP、TCP、UDP、HTTP、Socket区别与联系

一、TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个具有四层体系结构的协议族。 自上而下分为:应用层、传输层、网络层、物理链路层。 如下图:    图1 应用层协议:HTTP、FTP、TELNET、SMTP、DNS等协议 传输层协议:TCP、UDP协议 网络层协议:ICMP、IP、IGM

Peter的专栏 2230

python3.12 在用django5.0创建超级用户时,遇到AttributeError: module ‘hashlib‘ has no attribute ‘pbkdf2_hmac‘的问题

产生问题的原因是python3.12的hashlib没有自带pbkdf2_hmac函数,该函数是加密算法的一种,只要通过别的函数导入pbkdf2_hmac即可。还有一种方法是将django默认使用的pbkdf2_hmac改为hashlib自带的sha2或其他算法返回加密的密码,笔者以后会尝试用此类办法解决问题。2.找到报错文件的位置/usr/local/lib/python3.12/site-packages/django/utils/crypto.py。保存修改的文件,重新执行创建超级用户的命令成功。

weixin_67057943的博客 852

iTunes登录协议抓包避坑指南:解决HTTPDebugger被检测问题(附临时方案)

本文详细解析了iTunes客户端登录协议抓包时遇到的HTTPDebugger等工具被检测的问题,并提供了实战解决方案。通过逆向分析iTunes的反调试与反检测机制,文章指导读者如何定位并绕过关键检测点,成功捕获登录流量,并深度解析了包括证书获取、签名缓冲区和最终认证在内的核心协议流程。

qsc901234的博客 808

2、TCP与UDP协议

解释了TCP和UDP的概念,给出了一些API接口的示例

AZhi 257

Linux Socket通信:一文详解TCP通信API用法

Linux所有的硬件接口都被当成一个文件来操作,相应的,这些硬件接口也有对应的文件操作符。比如,文件操作符0表示标准输入流,对应的硬件是键盘;文件操作符1表示标准输出流,对应的硬件是显示器。这么看的话,套接字被当成文件就容易理解了。而且,Linux通过read()函数和write()函数进行文件的读写,同样,也可以用这两个函数对其他计算机发送和接收消息。.........

a1367666195的博客 955

Maltab GUI课程设计——网络爬虫程序(基金连涨连跌提醒)

Maltab GUI课程设计——网络爬虫程序(基金连涨连跌提醒)

果果爱腰果的博客 850

c\c++: Identifiers, modifier, qualifier, specifier, decorator; systemtap

文章目录参考英语含义在c、C++ 参考 c++ 标准 https://blog.youkuaiyun.com/tyronne/article/details/44016621 英语含义 modifier word or phrase that modifies (modify 2) another word or phrase 修饰语. qualifier (grammar) word, esp an adjective or adverb, that qualifies another word 修饰词; (尤指)形

mzhan017的博客 2430

java实现UDP及TCP通信

UDP(User Datagram Protocol)用户数据报协议,TCP(Transmission Control Protocol) 传输控制协议,是传输层的两个重要协议。UDP是一种无连接、不可靠传输的协议。其将数据源IP、目的地IP和端口封装成数据包,不需要建立连接,每个数据包的大小限制在64KB内;发送不管对方是否准备好,接收方收到也不确认,故是不可靠的;可以广播发送,发送数据结束时无需释放资源,开销小,速度快。UDP协议适合于即时通信场景,例如语音通话、视频等。

Super algorithm 的博客,技术爱好者。 2951

8.DJI-PSDK:一站式项目功能开发总结(空中气象站项目/激光甲烷检测项目)

本文将以一篇文章的幅度快速完成: 项目一:空中气象站项目; 项目二:激光甲烷项目; 项目所使用的PSDK来源于第0章节末尾的百度网盘;解压:Payload-SDK-3.8.zip代码所在目录:双击打开: 修改打印串口和相关波特率,我们修改如下: 进行相关编译选项配置如下: :

哒宰的博客 294

Java:TCP/UDP网络编程

TCP与UDP简单上手

qq_73698057的博客 1708

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JavaSE丨网络编程核心指南:从协议原理到对象传输实战(TCP/UDP)

本文介绍了计算机网络基础概念和通信协议

weixin_73953000的博客 939

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

JavaAPI(网络编程)

网络编程的相关知识点 图片引用自王道2024计算机网络考研复习指导

NGC2237999的博客 1258

javaAPI_网络编程_网络编程基础1

网络编程基础 1.网络编程概述 (1).计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 (2).网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2.网络模型概述以及图解 (1).计算机网络之间以何种规则进行通信,就是网络模型...

u013185175的博客 268

javaAPI_网络编程基础_网络编程基础1

网络编程基础 1.网络编程概述 (1).计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件 及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 (2).网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2.网络模型概述以及图解 ...

ahow81212的博客 115

Java网络编程

Java网络编程是一种使用Java编程语言编写网络应用程序的方法。它使开发人员能够使用Java API来创建、连接和通信网络上的应用程序。Java网络编程涉及创建套接字(socket),建立TCP/IP连接,发送和接收数据,并通过网络传输信息。Java网络编程还可以用于构建客户端/服务器应用程序和分布式应用程序。在Java网络编程中,应用程序可以使用Java Socket类或Java NIO(非阻塞I/O)库来与远程主机进行通信。

qq_29575635的博客 454

java 网络编程

软件结构 常见的软件结构有C/S和B/S Client/Server(C/S结构),表示 客户端/服务器 的软件结构,例如QQ、微信、网盘客户端等,只要是需要我们下载安装,并且和服务器通信的这一类软件,都属于C/S的软件结构。 Browser/Server(B/S结构),表示 浏览器/服务器 的软件结构,例如淘宝网、京东商城等,只要是需要使用浏览器,并且和服务器通信的这一类软件,都属于B/S的软件结构 C/S和B/S各有优势: C/S在图形的表现能力上以及运行的速度上肯定是强于B/S的 C/S/需要运行专门

resistancealex的博客 197

java基础:网络编程(一)简介

网络编程简介 这些知识点在学习计算机网络时都有详细讲,我这就简单介绍下,具体的看计算机网络相关知识。 1、软件结构 常见的软件结构有C/S和B/S C/S (Client/Server) 表示客户端/服务器的软件结构,简单举例:QQ、微信、网盘客户端等,只要是需要我们下载安装,并且和服务器通信的这一类软件,都属于C/S的软件结构。结构如图: B/S (Browser/Server) 表示浏览器/服务器的软件结构,例如淘宝网、京东商城等,只要是需要使用浏览器,并且和服务器通信的这一类软件,都属于B/S的

lalala_dxf的博客 983

29.1 Java进阶之网络IP,DNS,TCP,UDP,客户端服务器通信过程,套接字

IP是一种互联网协议地址,用它我们可以唯一的标识互联网上的计算机。它由四段用点隔开的0~225的十进制数组成,例如:130.254.204.31。

c1776167012的博客 688

网络编程详解:从基础概念到Java实现

本文介绍了网络编程的基础概念与技术要点。主要内容包括:1.计算机网络定义及其软件结构(C/S与B/S对比);2.网络通信三要素(IP地址、端口号、通信协议);3.TCP与UDP协议的对比与应用场景;4.Java中TCP/UDP编程实现方法。重点分析了TCP的三次握手、四次挥手机制,以及Java Socket编程的基本流程,包括服务端监听、客户端连接、数据流传输等核心环节。文章为网络编程初学者提供了系统性的技术框架和实践指导。

m0_73073987的博客 1409

java api 基础编程_javaAPI_网络编程基础_网络编程基础1

网络编程基础1.网络编程概述(1).计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。(2).网络编程就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。2.网络模型概述以及图解(1).计算机网络之间以何种规则进行通信,就是网络模型研究问题.(2).网络...

weixin_29358053的博客 91

Java从接触到放弃(二十一)--网络编程

Day Twenty-One 网络编程 网络编程中有两个主要的问题 如何准确的定位到网络上的一台或者多台主机 找到主机之后如何进行通信 网络编程中的要素 IP和端口号 网络通信协议 udp,tcp IP 如何能获取到IP地址,在Java中有这样的一个类inetAddress,这个类是在java.net.InetAddress这个包下的,这个包下面的都是和网络相关的。在JavaAPI中对这个类有详细的介绍以及如何去使用。这个类有两个子类,Inet4Address和Inet6Address。

huanxin1109的博客 154

java网络编程基础知识

前言 一直以来,认为自己从事的是android开发,后台接口怎么提供是后台的事情,至于用java,go,php等和自己有关系,后来发现错了,做前端开发熟练掌握网络编程知识,对前端程序开发是事半功倍。参考了一些技术博客文档,并仔细查看了javaAPI,把java编程知识总结一下,以备日后学习翻阅。 基础知识 1,OSI分层模型和TCP/IP分层模型的对应关系 网络分层有原来的

王玉见的博客 703

JAVA基础--UDP编程

今天学习到的是关于Java编程基础的UDP编程,其实我们可以看到目前很多招聘的要求都会写上这么一句.熟悉了解UDP/TCP编程.那么UDP/TCP编程到底是什么呢?我们今天将会开展一段体验UDP的旅程. 如果大家没听过UDP,那么相信大家对计算机网络这一块的了解估计也没有多少.那么我要先给大家讲解一下关于计算机网络的基本概念 首先网络编程三要素: IP地址.我们只要理解为是个人电脑的地

LigherFung的秘密花园 283
上一篇: SpringMVC概述及小案例
下一篇: Java中线程创建以及线程的生命周期
madi_Goly
博客等级 码龄16年 11粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值