让每一名学员高薪就业
返回列表 发新帖

网络编程基础

[复制链接]

114

主题

268

帖子

2522

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2522

版主

发表于 2019-7-10 14:58:29  | 显示全部楼层 | 阅读模式
1、网络编程基础
简单来看,网络编程的目标就是计算机之间相互通讯数据。Java SDK提供了一系列API来完成这些工作,例如Socket。对于程序员来说,这些API被存放在java.net这个包里面,因此只要导入这个包就可以进行网络编程。(下面是java各个包的用途)
               java/ javax(java增强包)
               java.lang (java的核心包--基本包 ,不需要导包)
               java.util(java的工具包 --集合框架ArrayList LinkedList)
               java.io(java IO包 读写文件)
               java.net(网络编程)
               java.awt/javax.swing(java的图形化界面)

2、TCP/IP协议
现在的Internet或Intranet大部分都是使用TCP/IP协议进行网络通信的,实际上TCP/IP协议是一组以TCP与IP协议为基础的相关协议的集合。
• 注意:该协议并不完全符合OSI的七层参考模型,而是采用的4层结构。
• IP协议是TCP/IP协议族的核心,也是互连网络层中最重要的协议
。其接收由更低层发来的数据包,并将该数据包发送到更高层,即TCP或UDP层;此外IP层也可以将从TCP或UDP层接收来的数据包传送到更低层。IP是面向无连接的数据报传送,所以IP协议将文传送到目的主机后,无论传送正确与否都不进行检验、不会送确认以及不保证分组的正确顺序。• TCP协议位于传输层,其提供面向有连接的数据包传送服务,保证数据包能够被正确传送与接收,包括内容的校验与包的顺序,损坏的包可以被重传。要注意的是,由于提供的是有保证的数据传送服务,因此传送效率要比没有保证的服务低,一般适合工作在广域网中,对网络状况非常好的局域网不是很合算。当然,是否采用TCP也取决于具体的应用需求。
3、端口和套接字
• 端口被规定为一个在0~65535之间的整数。Http服务一般使用80端口,Ftp使用的是21端口,那么客户必须通过80端口才能连接到服务器的Http服务,而通过21端口,才能连接到服务器的Ftp服务器上。
• 在所有的端口中1~1023之间已经被系统所占用了,因此在定义自己的端口时,不能使用这一段的端口号,而应该使用1024~65535之间的任意端口号,以免发生端口冲突。
• 网络程序中的套接字用来将应用程序与端口连接起来,套接字是一个软件实现,也是一个假想的装置。在Java中,将套接字抽象化为类,所以程序只需创建Socket类的对象,就可以使用套接字。那么Java是如何实现数据传递的呢?答案是使用Socket的流对象进行数据传输,Sokcet类中有输入和输出流。使用Socket进行的通信都称为Socket通信。将编写的Socket类,用在Socket通信程序中,这就称为Socket网络程序设计。

4、Socket套接字
• Socket套接字是基于TCP/IP协议的编程接口,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过Socket套接字向网络发出请求或者应答网络请求。
• Socket有两种主要的操作方式,包括面向连接的和无连接的。面向连接的socket操作就像人们打电话,必须先拨号码,建立一个连接,然后再对话。数据包在到达接收端时的顺序与它们出发时的顺序时一样,就像一个人在电话中对另一个人说话一样,每一个字到达另一端的时候与它出发时的顺序一样。
• 无连接的socket操作就像是邮递员送信,邮递员只负责把信送出,至于何时发出,最后能不能到达收信人手中不能保证,无连接
5、Socket类
• Socket类表示套接字。使用Socket时,需要指定待连接服务器的IP地址及端口号。客户机创建了Socket对象后,将马上向指定的IP地址及端口发起请求且尝试连接。于是,服务器套接字就会创建新的套接字对象,使其与客户端套接字连接起来。一旦服务器套接字与客户端套接字成功连接后,就可以获取套接字的输入输出流,彼此进行数据交换。Socket类一共有9个构造器,表列出了其中常用的两个。
• Socket类中同样具有一些方法。其中getPort方法和getLocalPort方法分别是获取连接的远程端口和使用的本地端口。getInputStream方法和getOutputStream方法分别是获取Socket对象的输入流和输出流,这两个方法是经常被使用到的。
• 注意:close方法虽然是很简单的,表示关闭Socket对象。但是该方法在程序中是必须有的,这是一个非常好的网络编程习惯。

6、网络编程C/S架构实例
• C/S架构的网络编程程序是由服务器端和客户端所组成的,在开发时一定要先开发服务器端的程序,再来开发客户端的程序。
• 08 int count=0;//声明用来计数的int局部变量
• 09 try
• 10 {
• 11 //创建绑定到9876端口的ServerSocket对象
• 12 ServerSocket server=new ServerSocket(9876);
• 13 System.out.println("服务器对9876端口正在进行监听");
• 14 //服务器循环接收客户端的请求,为不同的客户端提供服务
• 15 while(true)
• 16 {
• 17 //接收客户端的连接请求,若有连接请求返回连接对应的Socket对
• 18 Socket sc=server.accept();
• 19 //获取当前连接的输入流,并使用处理流进行封装
• 20 DataInputStream din=new DataInputStream(sc.getInput Stream());1-17

• 21 //获取当前连接的输出流,并使用处理流进行封装
• 22 DataOutputStream dout=new
DataOutputStream(sc.getOutput Stream());
• 23 //打印客户端的信息
• 24 System.out.println("这是第"+(++count)+"个客户访问");
• 25 System.out.println("客户端IP地址:"+sc.getInetAddress());
• 26 System.out.println("本地端口号:"+sc.getLocalPort());
• 27 System.out.println("客户端信息:"+din.readUTF());
• 28 //向客户端发送回应信息
• 29 dout.writeUTF("服务器的时间为:"+(new Date())+"。");
• 30 //关闭流
• 31 din.close();
• 32 dout.close();
• 33 //关闭此Socket连接
• 34 sc.close();1-18

• 在该程序的第12行首先使用ServerSocket类创建了一个对象来对
9876端口进行监听。当有客户端程序访问该程序时,就执行while
循环,从而让服务器获取客户端的信息,并从服务器端向客户端
发送当前时间信息。
• 开发完服务器端程序后,就需要继续来开发运行在客户端的程序
。在客户端的程序需要使用Socket类来进行操作。1-19
• 09 //创建连接到服务器的Socket对象
• 10 Socket sc=new Socket("192.168.1.119",9876);
• 11 //获取当前连接的输入流,并使用处理流进行封装
• 12 DataInputStream din=new DataInputStream(sc.getInputStream());
• 13 //获取当前连接的输出流,并使用处理流进行封装
• 14 DataOutputStream dout=new DataOutputStream(sc.getOutput
Stream());
• 15 //向服务器发送消息
• 16 dout.writeUTF("Hello");
• 17 //读取服务器的返回消息并打印
• 18 System.out.println(din.readUTF());
• 19 //关闭流
• 20 din.close();
• 21 dout.close();
• 22 //关闭此Socket连接
• 23 sc.close();1-20

• 在该客户端程序中首先使用流来获取服务器端向客户端发送的信息,该信息是指服务器端的时间。从运行结果中也可以看到这一点。客户端访问服务器端程序后,服务器端运行结果也会发生变化,出现图20-3的运行结果。从运行结果中可以看出显示客户端的IP地址,本地端口号和客户端向服务器端发送的信息。
• 注意:在进行网络编程时,有一点是需要特别注意的。服务器端程序运行后,运行结果是不可以关闭的,这样客户端才会访问到该服务器端程序。
• 如果一个服务器端只能被一个客户端程序访问,这显然是不合理的。
• 当有多个客户方法该服务器程序时将同时显示所有用户的信息。这里采用的是使用一个客户端程序进行多次访问,从而出现两次

回复

使用道具 举报

0

主题

4

帖子

0

积分

菜鸟

Rank: 1

积分
0
发表于 2019-7-10 14:58:47  | 显示全部楼层
培训多久毕业
回复 支持 反对

使用道具 举报

0

主题

13

帖子

4

积分

菜鸟

Rank: 1

积分
4
发表于 2019-7-10 14:59:58  | 显示全部楼层
老师,你上课么
回复 支持 反对

使用道具 举报

0

主题

6

帖子

10

积分

菜鸟

Rank: 1

积分
10
发表于 2019-7-10 15:00:04  | 显示全部楼层
发帖子的老师怎么联系
回复 支持 反对

使用道具 举报

0

主题

3

帖子

9

积分

菜鸟

Rank: 1

积分
9
发表于 2019-7-10 15:00:05  | 显示全部楼层
楼主是老师么
回复 支持 反对

使用道具 举报

0

主题

5

帖子

5

积分

菜鸟

Rank: 1

积分
5
发表于 2019-7-10 15:00:20  | 显示全部楼层
好东西一定要看看!
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Java培训  |   PHP培训  |   UI培训  |   H5培训  |   Python培训  |   大数据培训  |   如何报名  |   视频下载
快速回复 返回顶部 返回列表