网络编程(计算机网络相关)-程序员宅基地

技术标签: java  java开发  服务器  

网络编程概述

        网络编程是什么

        就是用来实现 网络互连的不同计算机上 运行的程序间可以进行 数据交换 。

        网络编程的目的:

        直接或间接地 通过网络协议 与其它计算机实现 数据交换,进行通讯。

        网络编程中有两个主要的问题:

        如何准确地定位网络上一台或多台主机,定位主机上的特定的应用

        找到主机后如何可靠高效地进行数据传输

网络通信要素概述(三要素)

        IP、端口号

        网络通信协议

 

 

通信要素1: IP和端口号

IP 地址:InetAddress

        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。

 

通信要素2:网络协议

        1.网络通信协议

        计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。

        2.通信协议分层的思想

        计算机网络通信涉及内容很多,比如指定源地址和目标地址,加密解密,压缩 解压缩,差错控制,流量控制,路由控制,如何实现如此复杂的网络协议呢?

        在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常 用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与 再下一层不发生关系。各层互不影响,利于系统的开发和扩展。

TCP/IP协议簇

1.传输层协议中有两个非常重要的协议:

        传输控制协议TCP(Transmission Control Protocol)

        用户数据报协议UDP(User Datagram Protocol)。

2.TCP/IP 以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。

3.IP(Internet Protocol)协议是网络层的主要协议,支持网间互连的数据通信。

4。TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即 物理链路层、IP层、传输层和应用层。

 

 

 

Socket

1.利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。

2.网络上具有唯一标识IP地址和端口号组合在一起才能构成唯一能识别标识符套接字

3.通信的两端都要有Socket,是两台机器间通信的端点。

4.网络通信其实就是Socket间的通信。

5.Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。

6.一般主动发起通信的应用程序属客户端,等待通信请求的为服务端。

7.Socket分类:

        流套接字(stream socket):使用TCP提供可依赖的字节流服务

        数据报套接字(datagram socket):使用UDP提供“尽力而为”的数据报服务

 

TCP网络编程

基于Socket的TCP编程

 

客户端Socket的工作过程包含以下四个基本的步骤:

        1.创建 Socket:根据指定服务端的 IP 地址或端口号构造 Socket 类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常。

        2.打开连接到 Socket 的输入/出流: 使用 getInputStream()方法获得输入流,使用 getOutputStream()方法获得输出流,进行数据传输

        3.按照一定的协议对 Socket 进行读/写操作:通过输入流读取服务器放入线路的信息 (但不能读取自己放入线路的信息),通过输出流将信息写入线程。

        4.关闭 Socket:断开客户端到服务器的连接,释放线路

客户端创建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 对象负责等待客户端请求建立套接字连接,类似邮局某个窗口 中的业务员。也就是说,服务器必须事先建立一个等待客户请求建立套接字 连接的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 协议可以解决数据在传送过程中的丢失、损坏、重复、乱序以及网络拥挤等问题,它保证数据可靠的传送。

UDP网络编程

 

 发送端:

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();
}

URL编程

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 表示的网络资源之 间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/abcfh123802/article/details/126169255

智能推荐

windows server 2012 服务器打开系统远程功能_请确认将rd授权管理器安装为-程序员宅基地

文章浏览阅读974次。然后在服务器池中选择你需要使用的服务器。需要选择安装的服务器类型,如图所示。安装完成后,点击左边服务器,打开“验证完成后,就可以使用远程服务了。选择完成确认内容并等待安装完成。选择完成后,在图示列表下勾选“”并使用服务器ID进行验证。在右键其中服务器,点击“_请确认将rd授权管理器安装为

如何验证自己编译的交叉工具链是否可用_musl-x86_64.so库作用-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏2次。自己编译的交叉工具链,使用工具链生成可执行程序来验证工具链是否可用_musl-x86_64.so库作用

富文本编辑器不能正常显示(使用freemarker生成模板)_form generator 富文本编辑器不显示-程序员宅基地

文章浏览阅读1.6k次。一、快速解决:1、使用freemarker模板生成的html,有时不能被富文本编辑器插件识别。2、其中一个解决方案,HTML压缩。网上找一个在线的HTML压缩网站,例如https://tool.oschina.net/jscompress/,把模板压缩后,再次生成的HTML就可以被富文本识别。二、具体实例:1、场景:在一些政府项目,财务金融项目,办公系统项目等等都会大量使用到freemarker模板,来生成HTML。2、问题:使用freemarker模板生成的HTML文本,富.._form generator 富文本编辑器不显示

Script error.全面解析_#r北:script error: luaj.luaerror: @/data/data/com.t-程序员宅基地

文章浏览阅读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

视频会议常用术语——转自华为TE40帮助文档_华为会议终端演示会场锁定-程序员宅基地

文章浏览阅读2.9k次。术语查看Web页面在线帮助中用到的术语。数字1080i 分辨率为1920×1080的隔行扫描图像格式。 1080p 分辨率为1920×1080的逐行扫描图像格式。 2CIF 分辨率为352×576的逐行扫描图像格式。 2SIF 分辨率为352×480的逐行扫描图像格式。 4CIF 分辨率为704×576的逐行扫描图像格式。 4SIF 分辨率为704×480的逐行扫描图像格式。 720p 分辨率为1_华为会议终端演示会场锁定

【 linux如何查看cuda版本】_linux cuda version-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏2次。linux如何查看cuda版本终端输入nvcc -V命令,即可查询到CUDA版本号_linux cuda version

随便推点

2023年3月| 红帽RHCE考试战报-微思红帽官方授权培训中心_rhce全国考点-程序员宅基地

文章浏览阅读1.1k次。每一张RHCE证书不仅代表了学员成为一名红帽认证工程师,同时也是对微思老师和学员辛勤的付出的肯定。正所谓“不想当将军的士兵不是好兵”,对于一个Linux从业人员来说升职加薪是他们的共同愿望,而考取红帽认证是行之有效的方式之一。企业对Linux人才特别是RHCE的需求不断的增大,而RHCE认证在Linux行业里属于含金量较高的一个认证,这种专业的技能认证越来越多的成为公司考虑一个员工加薪、升职、晋升的标准和参考。热烈祝贺微思的15名学员成为真正意义上的红帽认证工程师。来看看部分学员的高分成绩单。_rhce全国考点

【传智播客】Javaweb程序设计任务教程 黑马程序员 第二章 课后答案_javaweb程序设计任务教程第二版课后答案-程序员宅基地

文章浏览阅读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程序设计任务教程第二版课后答案

testng的用法--未消化的,未研究明白-程序员宅基地

文章浏览阅读117次。2019独角兽企业重金招聘Python工程师标准>>> ..._f网站

二、svn分支策略原理:-程序员宅基地

文章浏览阅读159次。零、说明:-----欢迎拍砖1、下面内容是找的网上资料总结的,不是生产环境内容,svn分支策略好麻烦啊2、merge很重要而且不好理解,merge修改的只是本地的工作副本,所以只要不提交,不会对服务端造成影响3、多个项目互相依赖,会不会混乱,版本怎么管理那????一、Trunk,Branches,Tags说明1、Branches、Tags生成都是使用svncopy命令生成..._svn切换分支的底层原理

阿里云轻量应用服务器LAMP镜像下搭建网站_阿里云轻量服务器lamp不用域名怎么建站-程序员宅基地

文章浏览阅读915次。阿里云轻量应用服务器LAMP镜像下搭建网站1.服务器选择我配的是2GB内存1核 40GB SSD系统盘。阿里的云翼计划24岁以下自动获取学生身份,这样购买的话一个月只要9.5元。2.选择应用镜像因为部署的是php项目所以选择的是LAMP应用镜像。3.购买之后,环境都是搭配好的。剩下的就是按照步骤配置MySQL和上传文件。1.解析域名。阿里云解析域名可在此快速添加DNS解析,其他域..._阿里云轻量服务器lamp不用域名怎么建站

Makefile教程-程序员宅基地

文章浏览阅读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里...

推荐文章

热门文章

相关标签