20145229 《Java程序设计》第10周学习总结

20145229 《Java程序设计》第10周学习总结

教材学习内容总结html

Java网络编程技术java

数据交换

在计算机网络中,如今命名IP地址的规定是IPv4协议,该协议规定每一个IP地址由4个0-255之间的数字组成,例如10.0.120.34。每一个接入网络的计算机都拥有惟一的IP地址。程序员

一个IP地址能够对应多个域名,一个域名只能对应一个IP地址。编程

在网络中传输的数据,所有是以IP地址做为地址标识,因此在实际传输数据之前须要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器,也就是通俗的说法叫作域名解服务器

为了可以方便的识别网络上的每一个设备,网络中的每一个设备都会有一个惟一的数字标识,这个就是IP地址。在计算机网络中,如今命名IP地址的规定是IPv4协议,该协议规定每一个IP地址由4个0-255之间的数字组成,例如10.0.120.34。每一个接入网络的计算机都拥有惟一的IP地址,这个IP地址多是固定的,也能够是动态的。网络

经过IP地址查找到该台计算机,而后经过端口标识这台计算机上的一个惟一的程序。这样就能够进行网络数据的交换了。框架

网络编程概述

网络编程就是两个或多个程序之间的数据交换,和普通的单机程序相比,网络程序最大的不一样就是须要交换数据的程序运行在不一样的计算机上。socket

网络通信基于“请求-响应”模型。也就是通信的一端发送数据,另一端反馈数据,网络通信都基于该模型。tcp

在网络通信中,第一次主动发起通信的程序被称做客户端(Client)程序,简称客户端,而在第一次通信中等待链接的程序被称做服务器端(Server)程序,简称服务器。学习

P2P程序是一种特殊的程序,应该一个P2P程序中既包含客户端程序,也包含服务器端程序。

协议:规定了传输数据格式。

网络通信方式

在现有的网络中,网络通信的方式主要有两种:

一、 TCP(传输控制协议)方式
二、 UDP(用户数据报协议)方式

客户端网络编程步骤

一、 创建网络链接
二、 交换数据
三、 关闭网络链接

网络编程的步骤:

一、 监听端口
服务器端属于被动等待链接,因此服务器端启动之后,不须要发起链接,而只须要监听本地计算机的某个固定端口便可。
这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。
二、 得到链接
当客户端链接到服务器端时,服务器端就能够得到一个链接,这个链接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也经过该链接进行数据交换。
通常在服务器端编程中,当得到链接时,须要开启专门的线程处理该链接,每一个链接都由独立的线程实现。
三、 交换数据
服务器端经过得到的链接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,而后进行逻辑处理,再把处理之后的结果数据发送给客户端。简单来讲,就是先接收再发送,这个和客户端的数据交换数序不一样。

Java网络编程技术

和网络编程有关的基本API位于java.net包中。基础的网络类——InetAddress类。该类的功能是表明一个IP地址,而且将IP地址和域名相关的操做方法包含在该类的内部。

代码实例:

package inetaddressdemo;

import java.net.*;
/**

  • 演示InetAddress类的基本使用
    */
    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){}
    }
    }

/127.0.0.1
chen/192.168.1.100
域名:chen
IP:192.168.1.100
TCP编程

TCP方式的网络编程实现时,以java.net.Socket类表明客户端链接,以java.net.ServerSocket类表明服务器端链接。因为高度的封装,程序员实际编程时,只须要指定IP地址和端口号码就能够创建链接了。一方面简化了Java语言网络编程的难度,另外也使得Java语言进行网络底层系统编程很困难,具体点说,Java语言没法实现底层的网络嗅探以及得到IP包结构等信息。

代码示例以下:

OutputStream os = socket1.getOutputStream(); //得到输出流

InputStream is = socket1.getInputStream(); //得到输入流

TDP编程

实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:

①DatagramSocket:实现“网络链接”,包括客户端网络链接和服务器端网络链接。DatagramSocket实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络链接,该类既能够用于实现客户端链接,也能够用于实现服务器端链接。

②DatagramPacket:实现对于网络中传输的数据封装,该类的对象表明网络中交换的数据。在UDP方式的网络编程中,不管是须要发送的数据仍是须要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。和TCP方式的网络传输相比,IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。

在使用TCP方式进行网络编程时,须要按照前面介绍的网络编程的步骤进行,下面分别介绍一下在Java语言中客户端和服务器端的实现步骤。
在客户端网络编程中,首先须要创建链接,在Java API中以java.net.Socket类的对象表明网络链接,因此创建客户端网络链接,也就是建立Socket类型的对象,该对象表明网络链接。

教材学习中的问题和解决过程

问题:如何实现两台电脑之间的数据传输?

解决方法:以一个简单的网络客户端程序示例

package tcp;
import java.io.;
import java.net.
;
/**

  • 简单的Socket客户端
  • 功能为:发送字符串“Hello”到服务器端,并打印出服务器端的反馈
    */
    public class SimpleSocketClient {
    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 = "Hello";
    try {
    //创建链接
    socket = new Socket(serverIP,port);
    //发送数据
    os = socket.getOutputStream();
    os.write(data.getBytes());
    //接收数据
    is = socket.getInputStream();
    byte[] b = new byte[1024];
    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) {}
    }
    }
    }

其余(感悟、思考等,可选)

这周学的是比较基础的网络编程,了解了一个大致的框架,可是其中的精髓没有了解,在之后的学习中愈来愈好吧

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 1/1 15/15
第二周 200/200 1/1 18/18
第三周 380/380 1/1 17/17
第四周 300/300 1/1 18/18
第五周 320/320 3/3 16/16
第六周 360/360 3/3 15/15
第七周 580/580 2/3 16/16
第八周 460/460 2/3 15/15
第九周 220/220 2/2 14/14
第十周 120/120 2/2 13/13

参考资料

相关文章
相关标签/搜索