网络编程是什么:
就是用来实现 网络互连的不同计算机上 运行的程序间可以进行 数据交换 。
网络编程的目的:
直接或间接地 通过网络协议 与其它计算机实现 数据交换,进行通讯。
网络编程中有两个主要的问题:
如何准确地定位网络上一台或多台主机,定位主机上的特定的应用
找到主机后如何可靠高效地进行数据传输
IP、端口号
网络通信协议
1.唯一的标识 Internet 上的计算机(通信实体)
2.本地回环地址(hostAddress):127.0.0.1 主机名(hostName):localhost
3.有两种分类方式:
IP地址分类方式1:IPV4 和 IPV6
IPV4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已 经用尽。以点分十进制表示,如192.168.0.1
IPV6:128位(16个字节),写成8个无符号整数,每个整数用四个十六进制位表示, 数之间用冒号(:)分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
IP地址分类方式2:公网地址(万维网使用)和私有地址(局域网使用)。192.168. 开头的就是私有址址,范围即为192.168.0.0--192.168.255.255,专门为组织机构内部使用
特点:不易记忆
1.标识正在计算机上运行的进程(程序),不同的进程有不同的端口号
2.被规定为一个 16 位的整数 0~65535。
3.端口分类:
公认端口:0~1023。被预先定义的服务通信占用(如:HTTP占用端口 80,FTP占用端口21,Telnet占用端口23)
注册端口:1024~49151。分配给用户进程或应用程序。(如:Tomcat占 用端口8080,MySQL占用端口3306,Oracle占用端口1521等)。
动态/私有端口:49152~65535。
4.端口号与IP地址的组合得出一个网络套接字:Socket。
1.网络通信协议
计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。
2.通信协议分层的思想
计算机网络通信涉及内容很多,比如指定源地址和目标地址,加密解密,压缩 解压缩,差错控制,流量控制,路由控制,如何实现如此复杂的网络协议呢?
在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常 用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与 再下一层不发生关系。各层互不影响,利于系统的开发和扩展。
1.传输层协议中有两个非常重要的协议:
传输控制协议TCP(Transmission Control Protocol)
用户数据报协议UDP(User Datagram Protocol)。
2.TCP/IP 以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。
3.IP(Internet Protocol)协议是网络层的主要协议,支持网间互连的数据通信。
4。TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即 物理链路层、IP层、传输层和应用层。
1.利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。
2.网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
3.通信的两端都要有Socket,是两台机器间通信的端点。
4.网络通信其实就是Socket间的通信。
5.Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。
6.一般主动发起通信的应用程序属客户端,等待通信请求的为服务端。
7.Socket分类:
流套接字(stream socket):使用TCP提供可依赖的字节流服务
数据报套接字(datagram socket):使用UDP提供“尽力而为”的数据报服务
客户端Socket的工作过程包含以下四个基本的步骤:
1.创建 Socket:根据指定服务端的 IP 地址或端口号构造 Socket 类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常。
2.打开连接到 Socket 的输入/出流: 使用 getInputStream()方法获得输入流,使用 getOutputStream()方法获得输出流,进行数据传输
3.按照一定的协议对 Socket 进行读/写操作:通过输入流读取服务器放入线路的信息 (但不能读取自己放入线路的信息),通过输出流将信息写入线程。
4.关闭 Socket:断开客户端到服务器的连接,释放线路
1.客户端程序可以使用Socket类创建对象,创建的同时会自动向服务器方发起连接。Socket的构造器是:
2. 客户端建立socketAtClient对象的过程就是向服务器发出套接字连接请求
Socket s = new Socket(“192.168.40.165”,9999);
OutputStream out = s.getOutputStream();
out.write(" hello".getBytes());
s.close();
服务器程序的工作过程包含以下四个基本的步骤:
1.调用 ServerSocket(int port) :创建一个服务器端套接字,并绑定到指定端口 上。用于监听客户端的请求。
2.调用 accept():监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象。
3.调用该Socket类对象的 getOutputStream() 和 getInputStream ():获取输出流和输入流,开始网络数据的发送和接收。
4.关闭ServerSocket和Socket对象:客户端访问结束,关闭通信套接字。
ServerSocket 对象负责等待客户端请求建立套接字连接,类似邮局某个窗口 中的业务员。也就是说,服务器必须事先建立一个等待客户请求建立套接字 连接的ServerSocket对象。
所谓“接收”客户的套接字请求,就是accept()方法会返回一个 Socket 对象
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept ();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int num = in.read(buf);
String str = new String(buf,0,num);
System.out.println(s.getInetAddress().toString()+”:”+str);
s.close();
ss.close();
例题:用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?
/** Server端程序
* @author xiaocui
* @date 2022年08月05日 13:01
*/
public class Server {
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server() {
try {
ss = new ServerSocket(1000);
while (true){
socket = ss.accept();
String RemoteIP = socket.getInetAddress().getHostAddress();
String RemotePort = ":" + socket.getLocalPort();
System.out.println("A client come in!IP:" + RemoteIP + RemotePort);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = in.readLine();
System.out.println("Client send is" + line);
out = new PrintWriter(socket.getOutputStream(), true);
out.println("Your Message Received!");
out.close();
in.close();
socket.close();
}
} catch (IOException e) {
out.println("wrong");
}
}
public static void main(String[] args) {
new Server();
}
}
/**Client端程序
* @author xiaocui
* @date 2022年08月05日 14:09
*/
public class Client {
Socket socket;
BufferedReader in;
PrintWriter out;
public Client() {
try {
System.out.println("Try to Connect to 127.0.0.1:10000");
socket = new Socket("127.0.0.1", 10000);
System.out.println("The Server Connected!");
System.out.println("Please enter some Character:");
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(), true);
out.println(line.readLine());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.close();
in.close();
socket.close();
} catch (IOException e) {
out.println("Wrong");
}
}
public static void main(String[] args) {
new Client();
}
}
客户端—服务端:
客户端: 自定义 、浏览器;服务端:自定义 、Tomcat服务器
客户端-服务器是一种最常见的网络应用程序模型。服务器是一个为其客户端提供某种特定 服务的硬件或软件。客户机是一个用户应用程序,用于访问某台服务器提供的服务。端口号 是对一个服务的访问场所,它用于区分同一物理计算机上的多个服务。套接字用于连接客户 端和服务器,客户端和服务器之间的每个通信会话使用一个不同的套接字。TCP协议用于实 现面向连接的会话。
类 Socket 和 ServerSocket 实现了基于TCP协议的客户端-服务器程序。Socket是客户端 和服务器之间的一个连接,连接创建的细节被隐藏了。这个连接提供了一个安全的数据传输 通道,这是因为 TCP 协议可以解决数据在传送过程中的丢失、损坏、重复、乱序以及网络拥挤等问题,它保证数据可靠的传送。
发送端:
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
byte[] by = "hello,atguigu.com".getBytes();
DatagramPacket dp = new DatagramPacket(by, 0, by.length,
InetAddress.getByName("127.0.0.1"), 10000);
ds.send(dp);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ds != null)
ds.close();
}
接收端:
在接收端,要指定监听的端口。
DatagramSocket ds = null;
try {
ds = new DatagramSocket(10000);
byte[] by = new byte[1024];
DatagramPacket dp = new DatagramPacket(by, by.length);
ds.receive(dp);
String str = new String(dp.getData(), 0, dp.getLength());
System.out.println(str + "--" + dp.getAddress());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ds != null)
ds.close();
}
1.URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一资源的地址。
2.它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate 这个资源。
3.通过 URL 我们可以访问 Internet 上的各种网络资源,比如最常见的 www,ftp 站点。浏览器通过解析给定的 URL 可以在网络上查找相应的文件或其他资源。
4.URL的基本结构由5部分组成:
类 URL 和 URLConnection 提供了最高级网络应用。URL 的网络资源的位置来同一表示 Internet 上各种网络资源。通过URL对象可以创建当前应用程序和 URL 表示的网络资源之 间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。
文章浏览阅读974次。然后在服务器池中选择你需要使用的服务器。需要选择安装的服务器类型,如图所示。安装完成后,点击左边服务器,打开“验证完成后,就可以使用远程服务了。选择完成确认内容并等待安装完成。选择完成后,在图示列表下勾选“”并使用服务器ID进行验证。在右键其中服务器,点击“_请确认将rd授权管理器安装为
文章浏览阅读2.1k次,点赞2次,收藏2次。自己编译的交叉工具链,使用工具链生成可执行程序来验证工具链是否可用_musl-x86_64.so库作用
文章浏览阅读1.6k次。一、快速解决:1、使用freemarker模板生成的html,有时不能被富文本编辑器插件识别。2、其中一个解决方案,HTML压缩。网上找一个在线的HTML压缩网站,例如https://tool.oschina.net/jscompress/,把模板压缩后,再次生成的HTML就可以被富文本识别。二、具体实例:1、场景:在一些政府项目,财务金融项目,办公系统项目等等都会大量使用到freemarker模板,来生成HTML。2、问题:使用freemarker模板生成的HTML文本,富.._form generator 富文本编辑器不显示
文章浏览阅读3.4k次。一些用户向我们反馈,Fundebug的JavaScript监控插件抓到了很多Script error.,然后行号和列号都是0…这就很尴尬了。今天,我们来详细地解析一下Script error.,后续我们还会深度测试并且提供解决方法。同源策略 (Same origin policy)解释Script error.之前,我们先简单聊聊同源策略。摘自MDN - Same-origin policy:_#r北:script error: luaj.luaerror: @/data/data/com.tencent.mobile**.sb/co
文章浏览阅读2.9k次。术语查看Web页面在线帮助中用到的术语。数字1080i 分辨率为1920×1080的隔行扫描图像格式。 1080p 分辨率为1920×1080的逐行扫描图像格式。 2CIF 分辨率为352×576的逐行扫描图像格式。 2SIF 分辨率为352×480的逐行扫描图像格式。 4CIF 分辨率为704×576的逐行扫描图像格式。 4SIF 分辨率为704×480的逐行扫描图像格式。 720p 分辨率为1_华为会议终端演示会场锁定
文章浏览阅读1.5w次,点赞2次,收藏2次。linux如何查看cuda版本终端输入nvcc -V命令,即可查询到CUDA版本号_linux cuda version
文章浏览阅读1.1k次。每一张RHCE证书不仅代表了学员成为一名红帽认证工程师,同时也是对微思老师和学员辛勤的付出的肯定。正所谓“不想当将军的士兵不是好兵”,对于一个Linux从业人员来说升职加薪是他们的共同愿望,而考取红帽认证是行之有效的方式之一。企业对Linux人才特别是RHCE的需求不断的增大,而RHCE认证在Linux行业里属于含金量较高的一个认证,这种专业的技能认证越来越多的成为公司考虑一个员工加薪、升职、晋升的标准和参考。热烈祝贺微思的15名学员成为真正意义上的红帽认证工程师。来看看部分学员的高分成绩单。_rhce全国考点
文章浏览阅读6.5k次,点赞3次,收藏18次。第二章 问题【测一测】学习完前面的内容,下面来动手测一测吧,请思考以下问题:1、简述HTTP1.1协议的通信过程?2、简述POST请求和GET请求有什么不同?(至少2点)3、请列举出Tomcat安装目录下的子目录,并对其进行简要说明?(至少列出5个)4、请编写一个格式良好的XML文档,要求包含足球队一支,队名为Madrid,球员5人:Ronaldo、Casillas、Ramos、Modric、Benzema;篮球队一支,队名为Lakers,队员2人:Oneal,Bryant。里面要求含有注释,注_javaweb程序设计任务教程第二版课后答案
文章浏览阅读117次。2019独角兽企业重金招聘Python工程师标准>>> ..._f网站
文章浏览阅读159次。零、说明:-----欢迎拍砖1、下面内容是找的网上资料总结的,不是生产环境内容,svn分支策略好麻烦啊2、merge很重要而且不好理解,merge修改的只是本地的工作副本,所以只要不提交,不会对服务端造成影响3、多个项目互相依赖,会不会混乱,版本怎么管理那????一、Trunk,Branches,Tags说明1、Branches、Tags生成都是使用svncopy命令生成..._svn切换分支的底层原理
文章浏览阅读915次。阿里云轻量应用服务器LAMP镜像下搭建网站1.服务器选择我配的是2GB内存1核 40GB SSD系统盘。阿里的云翼计划24岁以下自动获取学生身份,这样购买的话一个月只要9.5元。2.选择应用镜像因为部署的是php项目所以选择的是LAMP应用镜像。3.购买之后,环境都是搭配好的。剩下的就是按照步骤配置MySQL和上传文件。1.解析域名。阿里云解析域名可在此快速添加DNS解析,其他域..._阿里云轻量服务器lamp不用域名怎么建站
文章浏览阅读2次。Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接1 Makefile 介绍 1.1 Makefile的规则1.2 一个示例1.3 make是如何工作的1.4 makefile中使用变量1.5 让make自动推导1.6 另类风格的makefile1.7 清空目标文件的规则2 Makefile 总述 2.1 Makefile里...