`

Java网络编程精解(01)

阅读更多
1 OSI参考模型
1.1 ISO 国际标准化组织(International Organization for Standization)
1.2 OSI 开放系统互连的体系结构 (Open System Interconnection)
1.3 OSI网络分层:物理层〉数据链路层〉网络层〉传输层〉会话层〉表示层〉应用层,下层为上层服务。
1.4 OSI各层协议:
    物理层     : EIA/TLA RS...
    数据链路层 : SDLC,STP...
    网络层     : IP,IPX...
    传输层     : TCP,UDP...
    会话层     : ZIP...
    表示层     : JPEG,MPEG...
    应用层     : FTP,HTTP,SNMP...

2 TCP/IP参考模型
2.1  TCP/IPI网络分层(对应OSI网络分层):
   主机-网络层(物理层,数据链路层)
   网络互联层(网络层)
   传输层(传输层)
   应用层(会话层,表示层,应用层)
2.2 TCP/IP协议:对网络分层的各层次作了简化,除主机-网络层外提供完善的协议,核心协议是:TCP,IP协议。
2.3 各层主要功能
2.3.1 主机-网络层
       TCP/IP协议没有提供实现及协议,要求第三方实现的主机-网络层为上层提供一个访问接口,来传递IP数据包。
       美国电气及电子工程师学会实现的协议集有:以太网(IEEE802.3),令牌环网(IEEE802.4)
2.3.2 网络互联层
       功能是发送IP数据包到目标主机(使用了IP协议,规定数据包的格式及数据包寻找路由的流程)
2.3.3 传输层
       功能是源主机和目标主机的进程可以会话。它用了二种协议:TCP,UDP
       TCP:面向连接,可靠的协议。UDP:不可靠,无连接的协议(SNMP,DNS)
2.3.4 应用层
2.3.4.1 TCP应用层的协议
         FTP  : 文件传输协议(网络上传输文件)
         TELNET : 虚拟终端协议。
HTTP   : 超文本传输协议
HTTPS  : 安全超文本传输协议
POP3   : 邮局协议(访问远程服务器上的邮件)
IMAP4  : 消息访问协议(POP3的升级版)
SMTP   : 简单邮件协议(发送电子邮件)
2.3.4.2 UDP协议
        SNMP :简单网络管理协议
DNS  : 域名系统协议
2.4 IP协议
    IP网络中每台主机有唯一的IP地址,用于标识每个主机。IP地址的取值范围:0~255
    IP地址由IP网址与IP主机地址组成。网络掩码确定IP地址中哪部分是网址,哪部分是主机地址。
    IP网址 = 网络掩码 & IP地址(二进制)
    NIC(统一负责全球的地址规划与管理)
    CNNIC(中国地区IP分配与管理) http://www.cnnic.net.cn
    192.168.0.0是网络地址,192.168.111.111广播地址
   
2.4.1 发送数据包的过程
      IP网络上的主机通过ARP(地址解析协议),向相同IP网址的主机(包括真正的物主机地址:物理地址和IP地址)发送数据包。
      ARP通过本地网络的路由的物理地址向目标IP地址发送数据包。具体按以下搜索并处理数据包:
      数据包生命周期已到就抛弃---〉路由表的主机---〉 路由表,匹配子网的路由器--->路由表,匹配网络的路由器---〉默认路由。
2.4.2 域名
      域名是从右到左表达意义,一般表示为:主机机器.单位名.网络名.顶层域名.
      DNS(Domain Name System):提供域名与IP地址的转换,因它存放了域名与IP地址的映射信息。
2.4.3 URL(Uniform Resource Locator:统一资源定位器)
      组成部分:应用层协议://主机IP地址或域名/资源所在路径/文件名
      URL中常见的协议:ftp,file(访问本地计算机所在文件) 
2.5   TCP协议及端口T
      TCP协议确保进程间顺序通信及在IP协议在传送数据时的顺序重组包及数据完整。
      端口范围为:0~65535,0~1023一般为固定服务。21为FTP,25为SMTP(邮件传输服务)80为HTTP(文本传输)135为RPC(远程过程调用)
      客户进程请求服务器进行TCP连接时,操作系统为随机分配一个未占用端口,断开时端口被释放。
      注意事项:TCP,UDP通过端口标识进程。TCP与UDP端口取值各自自由,允许这二个端口取值一样。
2.6 RFC(Request For Comment)
    RFC:互联网相关技术规范性文档。
2.7 客户/服务器通信模式
    有二个通信进程中,A为客户端进程,B为服务端进程, A向B发出请求,B响应请求。B可向多个客户端提供服务。
    网络应用层规定了客户程序与服务程序通信的细节。如HTTP协议规定了请求与响应格式。
    应用层通用服务端口
    服务                    端口        协议
    文件传输服务            21          FTP
    远程登录                23          TELNET
    传输邮件服务            25          SMTP
    超文本传输服服          80          HTTP
    访问远程服务的邮件服务  110         POP3
    互联网消息存取服务      143         IMAP4
    安全的超文本传输服务    443         HTTPS
    安全的远程登录          992         TELNETS
    安全的互联网消息存取服务993         IMAPS
3 示例代码:

客户端示例代码(EchoClient)

import java.net.*;
import java.io.*;


public class EchoClient {

	private String host = "localhost";
	private int port = 8000;
	private Socket socket;

	public EchoClient() throws IOException {
		socket = new Socket(host, port);
	}

	public static void main(String args[]) throws IOException {
		new EchoClient().talk();
	}

	private PrintWriter getWriter(Socket socket) throws IOException {
		OutputStream socketOut = socket.getOutputStream();
		return new PrintWriter(socketOut, true);
	}

	private BufferedReader getReader(Socket socket) throws IOException {
		InputStream socketIn = socket.getInputStream();
		return new BufferedReader(new InputStreamReader(socketIn));
	}

	public void talk() throws IOException {
		try {
			
			BufferedReader br = getReader(socket);
			PrintWriter pw = getWriter(socket);
			BufferedReader localReader = new BufferedReader(
					new InputStreamReader(System.in));
			String msg = null;
			while ((msg = localReader.readLine()) != null) {

				pw.println(msg);
				System.out.println(br.readLine());

				if (msg.equals("bye"))
					break;
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


服务器端口示例代码

import java.io.*;
import java.net.*;


public class EchoServer {
	private int port = 8000;
	private ServerSocket serverSocket;

	public EchoServer() throws IOException {
		serverSocket = new ServerSocket(port);
		System.out.println("服务器启动");
	}

	public String echo(String msg) {
		return "echo:" + msg;
	}

	private PrintWriter getWriter(Socket socket) throws IOException {
		OutputStream socketOut = socket.getOutputStream();
		return new PrintWriter(socketOut, true);
	}

	private BufferedReader getReader(Socket socket) throws IOException {
		InputStream socketIn = socket.getInputStream();
		return new BufferedReader(new InputStreamReader(socketIn));
	}

	public void service() {
		while (true) {
			Socket socket = null;
			try {
				socket = serverSocket.accept(); // 等待客户连接
				System.out.println("New connection accepted "
						+ socket.getInetAddress() + ":" + socket.getPort());
				BufferedReader br = getReader(socket);
				PrintWriter pw = getWriter(socket);

				String msg = null;
				while ((msg = br.readLine()) != null) {
					System.out.println(msg);
					pw.println(echo(msg));
					if (msg.equals("bye")) // 如果客户发送的消息为“bye”,就结束通信
						break;
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					if (socket != null)
						socket.close(); // 断开连接
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String args[]) throws IOException {
		new EchoServer().service();
	}
}

下面程序实现效果一样

import java.io.*;

public class EchoPlayer {
	public String echo(String msg) {
		return "echo:" + msg;
	}

	public void talk() throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String msg = null;
		while ((msg = br.readLine()) != null) {
			System.out.println(echo(msg));
			if (msg.equals("bye")) // 当用户输入“bye”,结束程序
				break;
		}
	}

	public static void main(String arg[]) throws IOException {
		new EchoPlayer().talk();
	}
}

/****************************************************
 * 作者:孙卫琴 * 来源:<<Java网络编程精解>> * 技术支持网址:www.javathinker.org *
 ***************************************************/


分享到:
评论

相关推荐

    Java网络编程精解(孙卫琴)电子教案

    《Java网络编程精解》是孙卫琴老师的一本经典教程,主要涵盖了Java语言在网络编程领域的深度解析。这本书深入浅出地介绍了如何使用Java进行网络通信,包括基本的TCP/IP协议、套接字编程、多线程技术以及HTTP、FTP等...

    读书笔记:JAVA网络编程精解.zip

    读书笔记:JAVA网络编程精解

    Java网络编程精解PPT课件.ppt

    Java网络编程精解PPT课件.ppt 本资源摘要信息是关于Java网络编程的PPT课件,主要介绍了基于UDP的数据报和套接字的相关知识点。 UDP协议简介 UDP(User Datagram Protocol,用户数据报协议)是一种传输层协议,...

    读书笔记:孙卫琴《Java网络编程精解》源码.zip

    读书笔记:孙卫琴《Java网络编程精解》源码

    Java编程案例精解源代码

    "Java编程案例精解源代码"提供了丰富的实例,帮助学习者深入理解和掌握Java编程技术。这个压缩包文件包含了与书本配套的完整源代码,为读者提供了实践操作的机会,以加深对理论知识的理解。 首先,我们要了解Java的...

    java网络编程(非阻塞与阻塞编程)

    在深入探讨Java网络编程中的非阻塞与阻塞编程之前,我们先来了解这两个概念的基本含义。阻塞编程,通常指的是在程序执行过程中,当某一部分代码遇到I/O操作时,如读写文件或网络通信,整个程序会暂停运行,等待I/O...

    Java网络编程精解之ServerSocket用法详解

    Java网络编程的核心在于客户端与服务器端的交互,而ServerSocket是Java中用于服务器端的类,它使得服务器能够监听特定端口,接收客户端的连接请求。本文将详细讲解ServerSocket的使用方法及其在多线程环境下的应用。...

    java编程案例精解

    总之,“Java编程案例精解”涵盖了Java编程的诸多关键点,包括但不限于基本语法、异常处理、文件操作、集合框架、多线程、网络编程以及标准库的使用。通过实例学习,学习者不仅可以巩固理论知识,还能提升解决实际...

    Java编程案例精解素材.rar

    本资源“Java编程案例精解素材.rar”包含了一系列实用的Java编程示例,旨在帮助学习者深入理解和掌握Java的核心概念与技术。 1. **使用邮件客户端工具**:JavaMail API是Java中用于处理电子邮件的库,它允许开发者...

    Java编程案例精解

    在《Java编程案例精解》的光盘资料中,可能包含了大量的实战项目,比如简单的命令行应用、图形用户界面(GUI)程序、网络编程案例、多线程编程、数据库连接(JDBC)操作以及I/O流的使用。这些案例能帮助读者在实践中...

    Java编程精解(孙卫琴)

    Java编程精解(孙卫琴) 经典Java书籍,你值得拥有

    java网络精解源码

    10. **实战演练**: "java网络精解源码"可能包含了上述知识点的实际应用示例,通过阅读和调试源码,开发者可以加深理解并提升实际编程技能。 这些知识点构成了Java网络编程的基础,对于任何希望在这一领域深入学习的...

    java网络编程

    "Java网络编程精解-孙卫琴.rar"可能是孙卫琴老师的著作,她是一位知名的Java教育专家。这本书可能详细解析了Java网络编程的各个方面,包括URL类的使用、HTTP协议的实现、NIO(非阻塞I/O)以及高级网络编程技巧。通过...

    java网络编程_孙卫琴_有书签

    《Java网络编程精解》是孙卫琴先生的一本经典著作,主要针对Java开发者,深入讲解了Java在网络编程领域的核心知识。这本书涵盖了从基础概念到高级应用的多个方面,旨在帮助读者理解并掌握Java如何进行网络通信。以下...

    Java数据库编程技术精解

    Java数据库编程技术精解,是Java开发者必备的技能之一,主要围绕JDBC(Java Database Connectivity)接口进行深入探讨。JDBC是Java平台中用于与各种数据库进行交互的标准API,无论你是初学者还是经验丰富的开发人员...

    Java多线程编程精解

    【Java多线程编程精解】 Java语言的多线程特性使得开发者可以在同一个程序中同时运行多个线程,实现并发处理,从而提高程序的效率和响应性。在Java中,多线程编程主要涉及到以下几个核心知识点: 1. **线程与线程...

    Java典型模块精解:电子相册

    在这个Java典型模块精解中,我们将深入探讨如何构建一个功能完备且用户体验良好的电子相册系统。 1. **Java基础**:电子相册的开发离不开Java语言的基础知识,包括类、对象、继承、多态等面向对象编程概念。Java的...

    Java 编程案例精解 第5章 聊天程序实现

    完成功能 采用C/S架构,由服务器和客房端组成。 ⑴服务器功能: 启动服务,建立侦听,接受客户端连接; 接收、分析、转发聊天信息; 向客户端发送系统消息; 关闭服务,向客户端发送服务关闭消息。...

    Windows 脚本编程核心技术精解

    《Windows脚本编程核心技术精解》这本书可能涵盖的内容包括:VBScript和JScript的基础语法、变量类型、流程控制、函数和对象模型、错误处理、脚本与Windows系统交互的API调用、使用WMI(Windows Management ...

Global site tag (gtag.js) - Google Analytics