首页 > 编程语言 >肖sir_Java 多线程___Java 网络协议__20

肖sir_Java 多线程___Java 网络协议__20

时间:2022-10-01 13:00:09浏览次数:58  
标签:__ Java Socket 编程 网络 服务器 多线程 服务端 客户端

Java 网络编程 1.1 网络编程介绍 网络编程指的就是直接或间接地通过网络协议与其他计算机进行通信。 网络编程中的基础概念: 1,网络分类 2,网络编程模型 3,网络协议 4,套接字和端口 1.2 网络编程介绍 网络分类:网络是指将有独立功能的多台计算机,通过通信设备线路连接起来,在网络软件的支持下,实现彼此之间资源共享和数据通信的整个系统。 网络范围可分为: 局域网(LocalArea Network)简称 LAN,是一种在小范围内实现的计算机网络,一般在一个建筑物内或者一个工厂、一个事业单位内部独有,范围较小。 城域网(Metropolitan Area Network)简称为 MAN,一般是一个城市内部组建的计算机信息网络,提供全市的信息服务。 广域网(Wide Area Network)简称为 WAN,它的范围很广,可以分布在一个省、 一个国家或者几个国家。 因特网(Internet)则是由无数的 LAN 和 WAN 组成的。   1.3 网络编程介绍 网络编程模型:在网络通信中主要有两种模式的通信方式: 1,客户机/服务器(Client/Server)模式,简称为 C/S 模式。 例如:电脑上安装的程序 2,浏览器/服务器(Browser/Server)模式,简称 B/S 模式。 例如:通过浏览器访问的网站   .4 网络编程介绍 网络协议:网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防 火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和格式的意义。 常用的网络协议: 1,IP 协议 英文Internet Protocol(网络之间互联的协议) 2,TCP协议 英文Transmission Control Protocol (传输控制协议) 3,UDP协议 英文User Datagram Protocol (用户数据报协议)   1.5 网络编程介绍 套接字和端口:在网络上很多应用程序都是采用客户端/服务器(C/S)的模式,实现网络通信必须将两台计算机连接起来建立一个双向的通信链路,这个双向通信链路的每一端称之为一个套接字(Socket)。 一台服务器上可能提供多种服务,使用 IP 地址只能唯一定位到某一台计算机,却不能准确地连接到想要连接的服务器。通常使用一个 0~65535 的整数来标识该机器上的某个服务,这个整数就是端口号(Port)。端口号并不是指计算机上实际存在的物理位置,而是一种软件上的抽象。 运行在一台特定机器上的某个服务器都有一个套接字绑定在该服务器上,服务器只是等待和监听客户的连接请求。客户端客户需要知道服务器的主机名和端口号。

 

 

 

 

1.6 网络编程介绍 Java 网络编程是指编写运行在多个设备(计算机)的Java程序,这些设备都通过网络连接起来。java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。 你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。 java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。 UDP:UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。     1.7 网络编程介绍 TCP四层协议: 链路层:数据链路层或网络接口层,包括设备驱动程序和网络接口卡,它们一起处理与电缆的物理接口细节。 网络层:处理分组在网络中的活动,如分组的选路;网络层的协议包括IP协议、ICMP协议(Internet互联网控制报文协议)、IGMP协议(Internet组管理协议)。 传输层:主要为两台主机上的应用程序提供端到端的通信,包括TCP(传输控制协议)和UDP(用户数据报协议)。 应用层:处理特定的应用程序细节。 1.8TCP七层协议:   1.9 网络编程介绍 三次握手: 第一次握手:客户端发送网络包,服务端收到。服务端得出结论:客户端发送能力、 服务端接收能力正常。 第二次握手:服务端发包,客户端收到。客户端得出结论:服务端接收、发送能力正 常,客户端接收、发送能力正常。 第三次握手:客户端发包,服务端收到。服务端得出结论:客户端接收、发送能力正 常,服务端发送、接收能力正常。 所以第一、二次握手,只是为了验证彼此的接收发送能力是否正常。 经历上面的三次握手过程,客户端和服务端都确认了自己的接收、发送能力是正常的,就可以正常通信了   1.1.0 网络编程介绍 四次挥手: 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。 2.1 Socket编程 Socket类代表一个套接字,ServerSocket类服务器监听客户端的连接。 两台计算机之间使用套接字建立TCP连接的步骤: 1,服务器实例化一个ServerSocket对象,表示通过服务器上的端口通信。 2,服务器调用ServerSocket类的accept() 方法等待客户端连接到服务器给定的端口。 3,客户端实例化一个Socket对象,指定服务器IP和端口号请求连接。如果通信被建立,则在客户端创建一个Socket对象能够与服务器进行通信。 5,服务器端接收到连接,accept()方法返回一个socket引用,该socket连接到客户端的socket。 连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流   3.1 Socket 服务端 ServerSocket serverSocket = new ServerSocket(端口号); Socket server = serverSocket.accept(); System.out.println("远程主机地址:" + server.getRemoteSocketAddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new DataOutputStream(server.getOutputStream()); out.writeUTF("谢谢连接我:" + server.getLocalSocketAddress()); server.close();   4.1 Socket 客户端 Socket client = new Socket(IP地址,端口号); OutputStream outToServer = client.getOutputStream(); DataOutputStream out = new DataOutputStream(outToServer); out.writeUTF("Hello from " + client.getLocalSocketAddress()); InputStream inFromServer = client.getInputStream(); DataInputStream in = new DataInputStream(inFromServer); System.out.println("服务器响应: " + in.readUTF()); client.close()   课后练习题 1,使用socket网络编程编写一个服务端程序和一个客户端程序,通过控制台进行及时聊天。  

标签:__,Java,Socket,编程,网络,服务器,多线程,服务端,客户端
From: https://www.cnblogs.com/xiaolehong/p/16747083.html

相关文章

  • ogg抽取进程如何不丢归档
    哪些情况OGG抽取进程需要旧的归档日志呢:抽取进程abend或stop了一段时间,再次启动自然需要这段时间内的所有归档日志。比如重启了OS或数据库,但忘了启动ogg;长假期间抽取进程a......
  • npm安装报错
    npm安装程序报错介绍:已经安装成功了node.js但是通过npm命令安装脚手架还是报错,如下:  解决方案:给node_global,node_cache两个文件夹赋予所有权限。 谢谢学习!!!......
  • IfcElectricResistanceMeasure
    IfcElectricResistanceMeasure类型定义IfcElectricResistanceMeasure是电阻的测量单位。通常测量单位为欧姆(V/A)。类型:REALIFC2x中的新类型。 EXPRESSSpecificatio......
  • C语言第20天,typedef关键词和条件编译
    1.给整型类型取别名原因:我们在整型数据类型中讨论过的,C语言标准并未规定这些数据类型的大小范围,具体的实现交由了编译器和平台决定。也就是说,int在VisualStudio2019中......
  • RxJS 系类 – Subject
    前言RxJS两大概念Observable和Subject.上一篇介绍了Observable这篇继续接受Subject. 参考RxJS建立Observable的基礎-Observable/Subject/BehaviorSu......
  • Spring03:展现模型数据、处理及校验表单
    1展现模型数据1.1图解过程在上一节“Spring-02:构建并运行基础Spring应用”中,我们运行的基础应用所展现的视图home.html还未包含任何领域类的信息,如下图:想要构建真实......
  • IfcElectricVoltageMeasure
    IfcElectricVoltageMeasure类型定义电压测量是电动势的测量。通常以伏特(V,W/A)测量。类型:REALIFC2.0中的新类型。 EXPRESSSpecificationTYPEIfcElectricVoltageM......
  • Mysql-基础篇
    通用语法及分类DDL:数据定义语言,用来定义数据库对象(数据库、表、字段)DML:数据操作语言,用来对数据库表中的数据进行增删改DQL:数据查询语言,用来查询数据库中表的记录......
  • CSS入门学习笔记
    CSS入门学习笔记一、CSS简介1、什么是CSS?2、为什么使用CSS?3、CSS的作用二、CSS语法1、CSS基础语法2、CSS注释语法3、CSS应用方法三、CSS选择器1、元素选择器2、类选择器3、......
  • 线段树的简单扩展及应用
    线段树的简单扩展及应用参考:线段树的高级用法-Alex_Wei注:这篇文章只开了个头就鸽了,如果真的准备学到点什么的话可以直接点上面这篇文章(前言线段树作为一种有效维护区......