标签:net 部分 res rip 影响 http protocol 程序设计 数据传输
完成学习资源中相关内容的学习
参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 2016-2017-2 《Java程序设计》第十周学习总结”
截止时间:本周日 24:00,不按时发博客要扣1分,优秀博客加1分
严禁抄袭,违反者列入立此存照-抄袭作业者的曝光台
1.1计算机网络概述:
照计算机网络的定义,通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含的设备有:计算机、路由器、交换
机等等。
路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控制等,通过光纤、网线等连接将设备连接起来,从而形成了
一张巨大的计算机网络。
为了能够方便的识别网络上的每个设备,网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址。
一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
注意: 在硬件上规定,端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口。
1.2网络编程概述:
网络编程就是两个或多个设备之间的数据交换,其实更具体的说,网络编程就是两个或多个程序之间的数据交换,和普通的单机程序相比,
网络程序最大的不同就是需要交换数据的程序运行在不同的计算机上,这样就造成了数据交换的复杂。
“请求-响应”模型:也就是通讯的一端发送数据,另外一端反馈数据,网络通讯都基于该模型。
客户端/服务器结构:也叫做Client/Server结构,简称C/S结构。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。这种结
构的优势表现力丰富,而服务器端也需要专门进行开发。但是这种结构也存在着很多不足,例如通用性差,实际维护时,也需要维护专门的
客户端和服务器端,维护的压力比较大。
浏览器/服务器结构:也叫做Browser/Server结构,简称为B/S结构。 使用B/S结构的程序,在开发时只需要开发服务器端即可,这种结构
的优势在于开发的压力比较小,不需要维护客户端。
P2P(Point to Point)程序:是一种特殊的程序,应该一个P2P程序中既包含客户端程序,也包含服务器端程序。
协议(Protocol):网络中传输的数据格式在网络编程中就被称作协议。
1.3网络通讯方式:
1、TCP(传输控制协议)方式 :TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据
传输,如果数据发送失败,则客户端会自动重发该数据。
2、 UDP(用户数据报协议)方式:而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很
可靠,如果发送失败则客户端无法获得。
小结:重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式
进行数据的传递。由于TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使用TCP方式的速度稍微慢一些,而且传输时产生的数据量
要比UDP稍微大一些。
2.1网络编程步骤
这里的步骤实现和语言无关,也就是说,这个步骤适用于各种语言实现。
2.1.1客户端网络编程步骤:
2.1.2服务器端网络编程步骤:
Java网络编程技术
和网络编程有关的基本API位于java.net包中,该包中包含了基本的网络编程实现,该包是网络编程的基础。该包中既包含基础的网络编程
类,也包含封装后的专门处理WEB相关处理类。
一个基础的网络类——InetAddress类。该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
TCP编程
如果发送的一方发送的数据接收方觉得有问题,则网络底层会自动要求发送方重发,直到接收方收到为止。
在Java语言中,对于TCP方式的网络编程提供了良好的支持,在实际实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。
UDP编程
UDP(User Datagram Protocol),中文意思是用户数据报协议,方式类似于发短信息,是一种物美价廉的通讯方式,使用该种方式无需建
立专用的虚拟连接。
网络编程中也是这样,必须要求可靠传输的信息一般使用TCP方式实现,一般的数据才使用UDP方式实现。
在Java API中设计的实现结构和TCP方式不太一样。当然,需要使用的类还是包含在java.net包中。
在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现:
1、DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接。
2、DatagramPacket类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是
需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发
送的内容等。
网络协议是指对于网络中传输的数据格式的规定。网络协议的实质也是客户端程序和服务器端程序对于数据的一种约定,只是由于以计算机
为基础,所以更多的是使用数字来代表内容,这样就显得比较抽象一些。
网络协议就是一种格式上的约定,可以根据逻辑的需要约定出各种数据格式,在进行设计时一般遵循“简单、通用、容易解析”的原则进行。
客户端程序需要完成的处理为:1、 客户端发送协议格式的生成2、 服务器端反馈数据格式的解析
服务器端程序需要完成的处理为:1、 服务器端反馈协议格式的生成2、 客户端发送协议格式的解析
网络协议格式是该程序最核心的技术秘密,因为一旦协议格式泄漏,则任何一个人都可以根据该格式进行客户端的编写,这样将影响服务器
端的实现,也容易出现一些其它的影响。
package cc.openhome;
import java.net.*;
public class InetAddressDemo {
public static void main(String[] args) {
try{
//使用域名创建对象
InetAddress inet1 = InetAddress.getByName("www.163.com");
System.out.println(inet1);
//使用IP创建对象
InetAddress inet2 = InetAddress.getByName("127.0.0.1");
System.out.println(inet2);
//获得本机地址对象
InetAddress inet3 = InetAddress.getLocalHost();
System.out.println(inet3);
//获得对象中存储的域名
String host = inet3.getHostName();
System.out.println("域名:" + host);
//获得对象中存储的IP
String ip = inet3.getHostAddress();
System.out.println("IP:" + ip);
}catch(Exception e){}
}
}
关于这段代码,是按照学习材料上操作过来的,但是最开始显示失败了,后来又仔细看学习材料,java这个网络InetAddress类必须有网络的连接才可以使用。
关于TCP编程连接部分,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接。
Socket socket1 = new Socket(“192.168.1.103”,10000);
Socket socket2 = new Socket(“www.blog.com”,80);
关于这段代码,socket1实现的是连接到IP地址是192.168.1.103的计算机的10000号端口,而socket2实现的是连接到域名是www.blog.com的计算机的80号端口,如果建立连接时,本机网络不通,或服务器端程序未开启,则会抛出异常。
关于如何复用Socket连接?通过看才料后,其实很简单,建立连接以后,将数据交换的逻辑写到一个循环中就可以了。这样只要循环不结束则连接就不会被关闭。
package tcp;
import java.io.;
import java.net.;
public class MulSocketClient {
public static void main(String[] args) {
Socket socket = null;
InputStream is = null;
OutputStream os = null;
//服务器端IP地址
String serverIP = "127.0.0.1";
//服务器端端口号
int port = 10000;
//发送内容
String data[] ={"First","Second","Third"};
try {
//建立连接
socket = new Socket(serverIP,port);
//初始化流
os = socket.getOutputStream();
is = socket.getInputStream();
byte[] b = new byte[1024];
for(int i = 0;i < data.length;i++){
//发送数据
os.write(data [i].getBytes());
//接收数据
int n = is.read(b);
//输出反馈数据
System.out.println ("服务器反馈:" + new String(b,0,n));
}
} catch (Exception e) {
e.printStackTrace(); //打印异常信息
}finally{
try {
//关闭流和连接
is.close();
os.close();
socket.close();
} catch (Exception e2) {}
}
}
}
这段代码将数据交换部分的逻辑写在一个for循环的内容,这样就可以建立一次连接,依次将data数组中的数据按照顺序发送给服务器端了。就可以实现复用Socket连接。
这周是学习的内容是学习网络编程,已经到了java语言运用的地方了,很多知识点在其他的课堂上有接触,但发现还是有不足,这周的代码
更多的主要还是学习材料里的代码进行操作,自己的动手编译程序的水平还欠缺一点。虽然到了java运用的时候,但还是要把握好java语言
基本的知识点,这才是最重要的。
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
本周有效代码超过300分行的(加2分)
6 其他加分: - 周五前发博客的加1分 - 感想,体会不假大空的加1分 - 排版精美的加一分 - 进度条中记录学习时间与改进情况的加1分 - 有动手写新代码的加1分 - 课后选择题有验证的加1分 - 代码Commit Message规范的加1分 - 错题学习深入的加1分 7 扣分: - 有抄袭的扣至0分 - 代码作弊的扣至0分
基于评分标准,我给本博客打分:10。得分情况如下:
就这10分,还是根本不够加的~~~
| 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
-------- | :----------------:|:----------------:|:---------------: |:-----:|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 200/200 | 2/2 | 20/20 | |
| 第二周 | 300/500 | 2/4 | 18/38 | |
| 第三周 | 500/1000 | 3/7 | 22/60 | |
| 第四周 | 800/1300 | 4/9 | 30/90 | |
| 第五周 | 1800/2000 | 5/9 | 45/100 | |
| 第六周 | 2400/3000 | 6/10 | 60/100 | |
| 第七周 | 3100/4000 | 7/11 | 75/100 | |
| 第八周 | 3700/4500 | 8/12 | 90/110 | |
| 第九周 | 4300/5000 | 9/12 | 105/130 | |
| 第十周 | 4800/5000 | 10/10 | 120/145 | |
计划学习时间:21小时
实际学习时间:15小时
改进情况: 有空多看看现代软件工程 课件 软件工程师能力自我评价表
## 20155336 2016-2017-2《JAVA程序设计》第十周学习总结
标签:net 部分 res rip 影响 http protocol 程序设计 数据传输
原文地址:http://www.cnblogs.com/hxl681207/p/6774693.html