网络编程学习

网络编程

软件结构

  • C/S结构:QQ、迅雷、百度网盘
    • 程序员:开发客户端和服务端程序
    • 用户:需要下载升级更新客户端
    • 对网络带宽要求相对较低
    • 数据安全性相对较高
  • B/S结构:IE、谷歌、火狐
    • 程序员:只需要开发服务端程序
    • 用户:用户无需下载客户端
    • 对网络带宽要求相对较高,不适合游戏软件
    • 数据安全性相对较高

网络通信协议

通信协议指计算机相互沟通时发送数据的规则。这些规则规定了发送数据的格式、传递的速度、传输的步骤。
在这里插入图片描述

  • TCP/IP协议(实际模型)
    • 应用层:HTTP
    • 传输层: TCP/UDP
    • 网络层: IP、ICMP、ARP
    • 物理+数据链路层:Link

TCP和UDP的区别

TCP和UDP是传输层的协议,其中TCP是面向连接的协议,UDP是不面向连接的协议。

  • UDP 不用建立连接即可发送
    • 比如发短信
    • 传输的数据量有限
    • 数据不可靠
  • TCP 建立连接后才能发送
    • 比如打电话
    • 理论上数据量无限制
    • 效率相对较低
    • 数据可靠

网络编程三要素

  • 协议
  • IP地址:电脑的编号,唯一标识。
    • ipv4和ipv6
    • 常用命令:
      • ipconfig / all
      • ping 网址
    • 因特网和局域网
    • 子网掩码:划分网络地址和主机地址
    • DHCP服务器:自动分配IP地址
    • DNS服务器:域名解析服务器
  • 端口:计算机进程的唯一标识
    • Tomcat 8080
    • MySQL 3306
    • Oracle 1521

IP + 端口 = 网络中运行进程的唯一标识

TCP协议模拟实现

这里是使用TCP协议来实现一个从客户端发送数据到服务器端的代码。
客户端:

public class TcpClient {public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket socket = new Socket("192.168.16.76",12306);//插座//通过socket获取输出流OutputStream os = socket.getOutputStream();//创建文件对象File file = new File("test/server.txt");String filename = file.getName();//创建数据流上传文件名DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(filename);//创建高效流读取文件数据BufferedOutputStream bos = new BufferedOutputStream(os);BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));//循环读写数据byte[] bytes = new byte[1024];int len;while((len = bis.read(bytes))!=-1){bos.write(bytes,0,len);}bos.close();bis.close();os.close();socket.close();}
}

服务器端
接收线程类:

public class TcpServerThread extends Thread{private Socket socket;public TcpServerThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {//3.获取输入流InputStream is = socket.getInputStream();BufferedInputStream bis = new BufferedInputStream(is);BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test/server.txt"));//获取客户端的IP地址InetAddress inetAddress = socket.getInetAddress();String hostAddress = inetAddress.getHostAddress();System.out.println("文件上传服务器启动");//System.out.println(hostAddress+"客户端正在上传文件");byte[] bys = new byte[1024];int len;while((len = bis.read(bys))!=-1){bos.write(bys,0,len);}System.out.println("文件上传成功");bos.close();bis.close();is.close();//serverSocket.close();} catch (IOException e) {throw new RuntimeException(e);}}
}

文件接收类:

public class UploadServer {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(12380);System.out.println("文件上传服务器启动");while(true){Socket clientSocket = ss.accept();new TcpServerThread(clientSocket).start();}}
}

UDP模拟实现

发送端:

public class UDP_send {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket();byte[] bytes = "hello, udp".getBytes();int len = bytes.length;InetAddress ip = InetAddress.getByName("10.10.0.28");//192.168.16.76//创建数据包DatagramPacket dp = new DatagramPacket(bytes, len, ip, 10086);ds.send(dp);ds.close();}
}

接收端:

public class UDP_receive {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);//接收数据到包裹ds.receive(dp);//解析包裹byte[] data = dp.getData();int length = dp.getLength();String s = new String(data, 0, length);System.out.println("s = " + s);InetAddress address = dp.getAddress();System.out.println("address = " + address);String hostAddress = dp.getAddress().getHostAddress();System.out.println("hostAddress = " + hostAddress);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS Pro如何制作不规则形状图例

在默认的情况下,ArcGIS Pro生成的图例是标准的点、直线和矩形的,对于湖泊等要素而言,这样的表示方式不够直观,我们可以将其优化一下,制作不规则的线和面来代替原有图例,这里为大家介绍一下制作方法&#xf…

联想拯救者笔记本Win11系统键盘无法打字解决参考方法

一位好机友新购买的联想拯救者笔记本在使用过程中突然发现整个键盘都不能使用了、不能打字、按任何按键都没有反应,只有鼠标能正常操作;那么这是什么问题呢?能不能是笔记本的键盘坏了呢?还是笔记本出现了什么故障而引起键盘失灵呢…

End-to-End Object Detection with Transformers

DERT 目标检测 基于卷积神经网络的目标检测回顾DETR对比Swin Transformer摘要检测网络流程DERT网络架构编码器概述解码器概述整体结构object queries的初始化Decoder中的Muiti-Head Self-AttentionDecoder中的Muiti-Head Attention 损失函数解决的问题 基于卷积神经网络的目标检…

同步请求和异步请求

同步请求和异步请求是在网络编程中常用的两种通信模式,它们有以下区别: 同步请求: 在发送一个请求后,程序会一直等待服务器返回响应,期间无法进行其他操作。请求发出后,程序会阻塞在请求处,直…

Kubernetes 调度约束(亲和性、污点、容忍)

目录 一、Pod启动典型创建过程 二、调度流程 三、指定调度节点 1.使用nodeName字段指定调度节点 2.使用nodeSelector指定调度节点 2.1给对应的node节点添加标签 2.2修改为nodeSelector调度方式 3.通过亲和性来指定调度节点 3.1节点亲和性 3.2Pod亲和性与反亲和性 3.2…

在APP中如何嵌入小游戏?

APP内嵌游戏之所以能火爆,主要是因为互联网对流量的追求是无止境的,之前高速增长的红利期后,获取新的流量成为各大厂商的挑战,小游戏的引入,就是这个目的,为已有的产品赋能,抢占用户注意力和使用…

华为云零代码新手教学-体验通过Astro Zero快速搭建微信小程序

您将会学到 您将学会如何基于Astro零代码能力,DIY开发,完成问卷、投票、信息收集、流程处理等工作,还能够在线筛选、分析数据。实现一站式快速开发个性化应用,体验轻松拖拽开发的乐趣。 您需要什么 环境准备 注册华为云账号、实…

Beats:安装及配置 Metricbeat (一)- 8.x

在我之前的文章: Beats:Beats 入门教程 (一)Beats:Beats 入门教程 (二) 我详细描述了如何在 Elastic Stack 7.x 安装及配置 Beats。在那里的安装,它通常不带有安全及 Elasticsearc…

第十三章 SpringBoot项目(总)

1.创建SpringBoot项目 1.1.设置编码 1.4.导入已有的spring boot项目 2.快速搭建Restfull风格的项目 2.1.返回字符串 RestController public class IndexController {RequestMapping("/demo1")public Object demo1() {System.out.println("demo1 ran...."…

【Leetcode】98. 验证二叉搜索树

一、题目 1、题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1: 输入:root = …

C#工程建立后修改工程文件名与命名空间

使用之前的项目做二次开发,项目快结束的时候,需要把主项目的名称修改成我们想要的。 之前从来没有这么干过,记录一下。 步骤如下: 1:打开vs2010项目解决方案,重命名,如下图所示: …

RabiitMq-4工作队列/消息应答

1.工作队列 工作机制类似一个生产者,多个消费者。工作队列采用轮训的机制,即工作线程一次只能处理一个消息,轮流处理 公共方法 public class MqUtiles {public static final String QUEUE_NAME"hello";public static Channel fu…