当前位置: 首页 > news >正文

Java基础(网络编程)

一、概述

目的:网络通信:

1、设备和设备

2、进程和进程

  1)不同设备之间

  2)本地设备之间

需要解决的问题:

如何准确地发送到对方的主机 - IP地址 - 唯一的定位网络中的一台主机

如何准确的发送到对方主机的进程 - 端口

找到主机后如何可靠高效地进行数据传输,要能看懂 - 协议 - 规定/标准

二、网络通信要素

如何实现网络中的主机互相通信?

~一定的规则(即:网络通信协议。有两套参考模型)

  OSI参考模型

 TCP/IP参考模型(或TCP/IP协议)

~通信双方地址

IP地址

端口号

2.1、网络协议:

一种规则,人与人交流有语言的规则,计算机之间通过网络交流也要有网络的规则。

2.1.1、OSI参考模型

模型过于理想化,未能在因特网上进行广泛推广 

2.1.2、TCP\IP协议

 出现较早,事实上的标准。

两种协议之间存在对应关系:

传输控制协议(TCP)和网络互联协议(IP),一组协议,不同功能互相关联

2.1.3、TCP和UDP

TCP协议:

使用TCP协议前,须先建立TCP连接,形成传输数据通道;

传输前,采用三次握手方式,是可靠的;

TCP协议进行通信的两个应用进程:客户端、服务端;

在连接中可进行大数据量的传输;

传输完毕,使用四次挥手方式,释放连接,结束传输,效率低。

UDP协议:

将数据、源、目的封装成数据包,不需要建立连接;

每个数据报的大小限制在64KB内;

因无需连接,故是不可靠的;

发送数据结束时无需释放资源,速度快。

三次握手过程:

四次挥手过程

 2.2、IP地址和端口号

2.2.1、IP地址

唯一的标识Internet上的计算机(通信实体)

分类:

IPV4:4个字节组成,4个0~255,如192.168.0.1

IPV6:128位(16个字节),写成8个无符号整数,每个整数用四个十六进制表示

如:3ffe:3201:1401:1280:c8ff:fe4d:db39:198

2.2.2、端口号省略。。。

三、TCP编程_服务器和客户端

目标:

1、客户端能够连接服务器

2、客户端能够给服务器发送字符串并在服务器的控制台打印,直到发送exit表示发送结束

这里见源码及其注释:

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/*
* 服务器
* */
public class Server {public static void main(String[] args) throws IOException {//创建监听套接字 最大端口65535ServerSocket serverSocket = new ServerSocket(60000);while (true) {//创建已连接套接字 - 返回表示有客户端连接Socket socket = serverSocket.accept();//获取客户端的IP和端口System.out.println(socket.getInetAddress().getHostAddress() + ":" + socket.getPort() + "已连接");int len = 0;byte[] arr = new byte[1024];//IO操作InputStream in = socket.getInputStream();while(true) {len = in.read(arr, 0, arr.length);if(len == -1) {break;}//byte[] --> StringString s = new String(arr, 0, len);System.out.println(s);}//关闭socket.close();}}
}
package day31;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);//创建套接字 -- 如果成功表示和服务器连接成功Socket socket = new Socket("127.0.0.1", 60000);//IO操作OutputStream out = socket.getOutputStream();while(true) {//获取用户输入String s = sc.next();if(s.equals("exit")) {break;}//将输入的数据发送给服务器out.write(s.getBytes());}//关闭socket.close();}
}

http://www.xdnf.cn/news/459019.html

相关文章:

  • 【软件设计师】模拟题五
  • gitlab+portainer 实现Ruoyi Vue前端CI/CD
  • 内网互通原则详解!
  • Apache HttpClient 5 用法-Java调用http服务
  • 文章复现|(1)整合scRNA-seq 和空间转录组学揭示了子宫内膜癌中 MDK-NCL 依赖性免疫抑制环境
  • duxapp 2025-01-13 更新 支持小程序配置文件
  • VisionPro斑点寻找工具Blob
  • 十、HQL:排序、联合与 CTE 高级查询
  • 2.4GHz无线芯片核心技术解析与典型应用
  • 基于策略的强化学习方法之近端策略优化(PPO)深度解析
  • 数据结构 -- 树形查找(一)二叉排序树
  • 前端上传获取excel文件后,如何读取excel文件的内容
  • 实用工具:微软软件PowerToys(完全免费),实现多台电脑共享鼠标和键盘(支持window系统)
  • 基于微信小程序的在线聊天功能实现:WebSocket通信实战
  • 代码随想录算法训练营第60期第三十七天打卡
  • Yeoman实战指南:从零打造自定义项目生成器
  • pyenv简单的Python版本管理器(macOS版)
  • P8803 [蓝桥杯 2022 国 B] 费用报销
  • V837s-LAN8720A网口phy芯片调试
  • git管理忽略指定路径/临时文件
  • GitHub 趋势日报 (2025年05月14日)
  • 时序数据库IoTDB分布式架构解析与运维指南
  • Kafka消息路由分区机制深度解析:架构设计与实现原理
  • Remote Desktop安卓远程无法使用中文输入法
  • Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查
  • HttpServletRequest常用功能简介-笔记
  • Go 中闭包的常见使用场景
  • 【Spring Cloud Gateway】Nacos整合遇坑记:503 Service Unavailable
  • 【人工智能-agent】--Dify+Mysql+Echarts搭建了一个能“听懂”人话的数据可视化助手!
  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷八及详细答案解析