Java:网络编程套接字(socket)

news/2024/11/2 8:32:33/

TCP和UDP的区别:

TCP:有连接,可靠传输,面向字节流,全双工;

UDP:无连接,不可靠传输,面向数据报,全双工;

有连接/无连接:

此处的连接是"抽象"的连接:

通信双方如果保存了通信对端的信息,就相当于是"有连接";

如果不保存对端的信息,就是"无连接";

可靠传输/不可靠传输:

此处谈到的可靠,不是100%到达对方,而是"尽可能";

网络环境非常复杂,存在很多不确定因素.

TCP内置了一些机制能保证可靠传输:

(1)感知对方是不是收到了数据;

(2)重传机制,在对方没收到的时候进行重试;

UDP则没有可靠性机制,完全不管发出去的数据是否能顺利到达对方;

面向字节流/面向数据报:

TCP是面向字节流的,TCP的传输过程就和文件流/水流是一样的特点;

UDP传输数据的基本单位不是字节,而是"UDP数据报",一次发送/接受,必须发送/接受完整的数据报.

全双工/半双工:

全双工:一个通信链路,可以发送数据,也可以接受数据(双向通信);

半双工:一个通信链路,只能发送/只能接受(单向通信);        

TCP/UDP api的使用

UDP

DatagramSocket

代表一个socket对象(操作系统中的概念);

socket可以认为是操作系统中广义的文件下里面的一种文件类型;

这样的文件,就是网卡这种硬件设备,抽象的表示方式;

(使程序员不必去关注硬件的差异和细节,直接操作socket对象,就能间接操作网卡)

构造方法:

DatagramSocekt方法:

DatagramPacket

代表一个UDP数据报(UDP传入传出数据的基本单位).

构造方法:

DatagramPacket方法:

写一个最简单的客户端服务器程序,不涉及到业务流程,只是对api的用法做演示.

"回显服务器"(echo server):客户端发啥样的请求,服务器就返回怎么样的响应.

没有任何业务逻辑,没有任何计算和处理.

InetSocketAddress

构造UDP发送的数据报时,需要传⼊ SocketAddress ,该对象可以使⽤ InetSocketAddress

来创建.

java">import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UDPEchoServer {private DatagramSocket socket = null;public UDPEchoServer(int port) throws SocketException {//服务器必须指定端口号,这样客户端才能找到服务器socket = new DatagramSocket(port);//在调用这个构造方法的过程中,jvm就会调用系统的socket api完成"端口号-进程"之间的关联动作.//"绑定端口号"bind.//对应一个系统来说,同一时刻,一个端口号只能被一个进程绑定,但是一个进程可以绑定多个端口号.//端口号就是为了区分进程,收到数据之后,明确说这个数据要给谁.//如果有多个进程尝试绑定同一个端口号,后来的进程就会绑定失败.//对于服务器一端来说,需要在socket对象创建的时候,就指定一个端口号,作为构造方法的参数.//后续服务器开始运行之后,操作系统,就会把端口号和该进程关联起来.}//通过start启动

http://www.ppmy.cn/news/1543816.html

相关文章

数据结构————map,set详解

今天带来map和set的详解&#xff0c;保证大家分清楚 一&#xff0c;概念 map和set是一种专门用来搜索的容器或数据结构 map能存储两个数据类型&#xff0c;我们称之为<key-value>模型 set只能存储一个数据类型&#xff0c;我们称之为纯<key>模型 它们的效率都非…

ATom:加州理工学院(CIT)化学电离质谱仪(CIMS)测量的气相有机和无机分析物的浓度CIT-CIMS

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATom: In Situ Data from Caltech Chemical Ionization Mass Spectrometer (CIT-CIMS), V2 简介 Caltech Chemical Ionization Mass Spectrometer (CIT-CIMS), V2是一种用于收集原位数据的质谱仪。…

Llama 3.2 Vision Molmo:多模态开源生态系统基础

编者按&#xff1a; 视觉功能的融入对模型能力和推理方式的影响如何&#xff1f;当我们需要一个既能看懂图像、又能生成文本的 AI 助手时&#xff0c;是否只能依赖于 GPT-4V 这样的闭源解决方案&#xff1f; 我们今天为大家分享的这篇文章&#xff0c;作者的核心观点是&#xf…

Vmos pro-虚拟机 解锁永久vip

[应用名称] 应用名称&#xff1a;Vmos pro [应用版本] 应用版本&#xff1a;2.99 [软件大小] 软件大小&#xff1a;32.2mb [应用简介] 应用简介&#xff1a;Vmos Pro这款安卓虚拟机平台&#xff0c;提供了多样化的ROM版本选择。用户可根据自身需求更换ROM&#xff0c;调…

力扣hot100-->位运算

目录 位运算 1. 136. 只出现一次的数字 2. 338. 比特位计数 3. 461. 汉明距离 位运算 1. 136. 只出现一次的数字 简单 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设…

【Nginx系列】Nginx 中的`proxy_set_header`指令:Host 字段的区别与联系

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

pycharm小游戏飞机射击

导入pygame模块 下载成功 图片略显粗糙 python 复制 import pygame import random # 初始化 pygame pygame.init() # 屏幕大小 SCREEN_WIDTH 800 SCREEN_HEIGHT 600 # 颜色 WHITE (255, 255, 255) BLACK (0, 0, 0) GREEN (0, 255, 0) RED (255, 0, 0) # 飞机速度 P…

8.3.2 前向分步算法与 AdaBoost

由前向分步算法可以推导出 AdaBoost&#xff0c;用定理叙述这一关系。   定理 8.3  AdaBoost 算法是前向分步加法算法的特例。 这时&#xff0c;模型是由基本分类器组成的加法模型&#xff0c;损失函数是指数函数。   证明 前向分步算法学习的正加法模型&#xff0c;当基…