20145203盖泽双 《Java程序设计》第十周学习总结
20145203盖泽双 《Java程序设计》第十周学习总结
教材学习内容总结
一、网络概述
1、网络编程就是两个或多个设备(程序)之间的数据交换。
2、识别网络上的每个设备:①IP地址②域名(Domain Name)。一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
3、DNS服务器(域名解析):在实际传输数据以前需要将域名转换为IP地址。
4、端口:让一个计算机可以同时运行多个网络程序。端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口。
5、C/S结构:网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构。
6、B/S结构:使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构。B/S结构其实也就是一种特殊的C/S结构。
7、P2P程序:P2P程序中既包含客户端程序,也包含服务器端程序,是一种特殊的程序。
8、协议(Protocol):在实际进行数据交换时,为了让接收端理解该数据,计算机比较笨,什么都不懂的,那么就需要规定该数据的格式,这个数据的格式就是协议。
那么如何来编写协议格式呢?答案是随意。只要按照这种协议格式能够生成唯一的编码,按照该编码可以唯一的解析出发送数据的内容即可。也正因为各个网络程序之间协议格式的不同,所以才导致了客户端程序都是专用的结构。
9、在现有的网络中,网络通讯的方式主要有两种:
①TCP(传输控制协议)方式
②UDP(用户数据报协议)方式
二、网络编程技术
1、客户端的编程主要由三个步骤实现:
①建立网络连接:在建立网络连接时需要指定连接到的服务器的IP地址和端口号。(出现重复)
②交换数据:交换数据严格按照请求响应模型进行。
③关闭网络连接。
2、服务器端的编程是由四个步骤实现,依次是:
①监听端口:这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。
2、 获得连接:服务器端和客户端也通过该连接进行数据交换。一般获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。
3、 交换数据。
4、 关闭连接。
5、InetAddress类:该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
6、TCP方式的网络编程实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。由于高度的封装,程序员实际编程时,只需要指定IP地址和端口号码就可以建立连接了。一方面简化了Java语言网络编程的难度,另外也使得Java语言进行网络底层系统编程很困难,具体点说,Java语言无法实现底层的网络嗅探以及获得IP包结构等信息。
7、实现服务器端监听的代码为:
ServerSocket ss = new ServerSocket(10000);
8、实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:
①DatagramSocket:实现“网络连接”,包括客户端网络连接和服务器端网络连接。DatagramSocket实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络连接,该类既可以用于实现客户端连接,也可以用于实现服务器端连接。
②DatagramPacket:实现对于网络中传输的数据封装,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。和TCP方式的网络传输相比,IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。
三、质数判别示例
1、 网络程序的功能都分为客户端程序和服务器端程序实现,下面先描述一下每个程序分别实现的功能:
1、 客户端程序功能:
a) 接收用户控制台输入
b) 判断输入内容是否合法
c) 按照协议格式生成发送数据
d) 发送数据
e) 接收服务器端反馈
f) 解析服务器端反馈信息,并输出
2、 服务器端程序功能:
a) 接收客户端发送数据
b) 按照协议格式解析数据
c) 判断数字是否是质数
d) 根据判断结果,生成协议数据
e) 将数据反馈给客户端
四、猜数字小游戏
客户端程序功能列表:
① 接收用户控制台输入
② 判断输入内容是否合法
③ 按照协议格式发送数据
④ 根据服务器端的反馈给出相应提示
服务器端程序功能列表:
① 接收客户端发送数据
② 按照协议格式解析数据
③ 判断发送过来的数字和随机数字的关系
④ 根据判断结果生产协议数据
⑤ 将生产的数据反馈给客户端
其中客户端程序协议格式如下:
1、 将用户输入的数字转换为字符串,然后转换为byte数组
2、 发送“quit”字符串代表退出
其中服务器端程序协议格式如下:
1、 反馈长度为1个字节,数字0代表相等(猜中),1代表大了,2代表小了,其它数字代表错误。
教材学习中的问题和解决过程
1、如何复用Socket连接?
``
package tcp;
import java.io.*;
import java.net.*;
/**
复用连接的echo服务器
功能:将客户端发送的内容反馈给客户端
*/
public class MulSocketServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
OutputStream os = null;
InputStream is = null;
//监听端口号
int port = 10000;
try {
//建立连接
serverSocket = new ServerSocket(port);
System.out.println("服务器已启动:");
//获得连接
socket = serverSocket.accept();
//初始化流
is = socket.getInputStream();
os = socket.getOutputStream();
byte[] b = new byte[1024];
for(int i = 0;i < 3;i++){
int n = is.read(b);
//输出
System.out.println("客户端发送内容为:" + new String(b,0,n));
//向客户端发送反馈内容
os.write(b, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try{
//关闭流和连接
os.close();
is.close();
socket.close();
serverSocket.close();
}catch(Exception e){}
}
}
}
``
2、如何使服务器端支持多个客户端同时工作?
解决方法:改善服务端示例程序将由两个部分组成,MulThreadSocketServer类实现服务器端控制,实现接收客户端连接,然后开启专门的逻辑线程处理该连接,LogicThread类实现对于一个客户端连接的逻辑处理,将处理的逻辑放置在该类的run方法中。
代码调试中的问题和解决过程
1、问题:

解决方法:因为我电脑中没有这个类的包,可以把包名删掉,或者加一个包。

本周代码托管截图

学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 200/200 | 2/2 | 20/20 | |
| 第二周 | 300/500 | 2/4 | 18/38 | |
| 第三周 | 500/1000 | 3/7 | 22/60 | |
| 第四周 | 300/1300 | 2/9 | 30/90 | |
| 第十周 | 700/3300 | 2/13 | 40/130 |
参考资料
20145203盖泽双 《Java程序设计》第十周学习总结的更多相关文章
- 201521123027 <java程序设计>第十周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...
- Java程序设计第十周学习总结
Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...
- ## 20145203盖泽双 《Java程序设计》第二周学习总结
20145203盖泽双 <Java程序设计>第二周学习总结 教材学习内容总结 1.java可以分为基本类型和类类型,基本类型包括整数.字节.浮点数.字符与布尔. 整数:short(占两个字 ...
- 20145240《Java程序设计》第二周学习总结
20145240 <Java程序设计>第二周学习总结 教材学习内容总结 本周主要学习了第三章的内容,讲的是Java的一些基础语法,包括两大系统类型.变量.运算符的基本使用.类型转换及几个基 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
随机推荐
- JDK安装与环境变量全过程-鹏鹏
首先先讲下JDK的含义以及用处: JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Jav ...
- Go 语言实现 HTTP 层面的反向代理
最近对 Go 语言的反向代理使用得偏多,其实在大概两年前就写过 TCP 层面的代理,而且那时也是用的 Go 语言,不同之处在于之前只是偶尔尝试一下使用,最近是因为工作需要使用的.相比较于 TCP 层面 ...
- html5备忘录——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1544 一.前言兼图片 ...
- Firbe Channel光纤信道
简介 中文名:网状信道 外文名:Fibre Channel 简 称:FC 光纤信道是一种高速网络技术标准(T11),主要应用于SAN(存储局域网).其拓扑结构分为三种,点到点.仲裁循环.交换结构 ...
- druapl7:"Notice: A non well formed numeric value encountered 在 _hierarchical_select_hierarchy_generate() "
这个是很诡异的一个Notice错误提醒,因为我在Drupal7.54+PHP7.0.1的环境下,并没有报这个错.但是我再Drupal7.59+PHP7.1.7的环境下就报错了.很奇怪,按照报错信息bi ...
- C#基础 继承和实例化
有代码如下,问输出的是多少: class Program { static void Main(string[] args) { B b = new B(); Console.ReadKey(); } ...
- redis 适用场景、缓存选择、java实现
redis适用场景 查询多,修改少:如国家地区信息.商品分类.数据字典 缓存选择 hibernate二级缓存.mybatis二级缓存.redishibernate二级缓存.mybatis二级缓存默认不 ...
- log4j.properties 配置示例
需要的jar如下: !-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId> ...
- 第一章:了解SQL_数据库基础
什么是数据库(database): 数据库(database)是保存有组织的数据的容器(通常是一个文件或一组文件).数据库是一种以某种有组织的方式存储的数据集合. 表(table): 表(tabl ...
- 使用uwsgi发布项目
1.先下载 uwsgi 指定豆瓣源下载 pip install -i https://pypi.douban.com/simple uwsgi 2.查看你的uwsgi基于那个python解释器运行的 ...