网络编程
1、网络编程基本概念
- 1、什么是计算机网络
- 把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便的互相传递信息,共享硬件、软件、数据信息等资源、
- 2、计算机网络的主要功能
- 资源共享
- 信息传输与集中处理
- 均衡负荷与分布处理
- 综合信息服务(www/综合业务数字网络ISDN)等
- 3、网络通信协议
- 要使计算机连成的网络互相通信,需要对数据传输速率、传输代码、代码结构、传输控制步奏、出错控制等制定一组标准,这一组共同遵守的通信标准就是网络通信协议,不同的计算机之间必须使用相同的通讯协议才能进行通信
- 4、网络通信接口
- 为了使两个节点之间进行对话,必须在他们之间建立通信工具(接口),使彼此之间能够进行信息交换,接口包括两部分
- 1、硬件装置:实现节点之间的信息传递
- 2、软件装置:规定双方进行通信的约定协议
- 为了使两个节点之间进行对话,必须在他们之间建立通信工具(接口),使彼此之间能够进行信息交换,接口包括两部分
- 5、程序开发结构
- 网络编程主要是指完成C/S程序的开发,程序的开发结构有以下两种
- C/S(客户端/服务器端)
- 开发两套程序,两套程序都需要维护,例如 QQ,CS程序一般比较稳定
- B/S(游览器端/服务端)
- 开发一套程序,客户端使用游览器进行访问,例如:各个论坛,BS程序一般稳定性差,而且安全性较差,但是C/S的程序开发在实际的java应用中毕竟很少了,而且整个java基本上都是B/S为主
- C/S程序主要可以完成以下两种程序的开发:
- TCP: 传输控制协议,采用三方握手的方式,确保准确的连接操作
- UDP:数据报协议,发送数据报,例如:手机短信或者QQ消息
- TCP/UDP的数据帧格式简答图例:
- 协议类型 | 源IP | 目标IP | 源端口 | 目标端口 | 帧序号 | 帧数据
- 其中协议类型用于区分TCP/UDP
2、网络编程TCP协议
- 传输控制协议/因特网互联协议,又称为网络通讯协议,这个协议是Internet最基本的协议,Internet国际互联网络的基础,简单的说就是由网络层的IP协议和传输层TCP协议组成的
- IP地址:网络中每台计算机的一个标识号码
- 本机IP:127.0.0.1 localhost
- 端口号(PORT):端口号的范围0~65535之间,0~1023之前的端口数是用于一些知名的网络服务和应用
- 应用层–>表示层–>会话层–>传输层–>网络层–>数据链路层—>物理层
- 1、TCP程序概述
- TCP是一个可靠的协议,面向连接的协议
- 实现TCP程序,需要编写服务器端和客户端,Java API为我们提供了java.net包,为实现网络应用程序提供类
- ServerSocket:此类实现服务器套接字
- Socket:此类实现客户端套接字(也可以叫“套接字”)
- Socket是网络驱动层提供给应用程序编程的接口和一种机制
- TCP是一个可靠的协议,面向连接的协议
2、实现服务器端和客户端程序
服务器端
public class ServerSocket extends Object
- 此类实现服务器套接字,服务器套接字等待请求通过网络传入,它基于该请求执行某些操作,然后可能向请求者返回结果。
ServerSocket(int port)
创建绑定到特定端口的服务器套接字
void setSoTimeout(int timeout)
通过制定超市值启用/禁用SO_TIMEIOUT 以毫秒为单位
InetAddress getInetAddress()
返回此服务器套接字的本地地址
Socket accept()
帧听并接受此套接字的连接
* 实现服务器端与客户端程序
* 客户端
```
public class Socket extends Object
此类实现客户端套接字(也可以就“套接字”),套接字是两台机器间通信的端点
Socket(String host,int port)
创建一个流套接字并将其连接到指定主机上的指定端口号
InputStream getInputStream()
返回次套接字的输入流
OutputStream getOutputStream()
返回此套接字的输出流
void setSoTimeout(int timeout)
启用/禁用带有指定超时值得SO_TIMEOUT,以毫秒为单位
```
3、TCP实现ECHO程序
服务端步奏:
//服务器端
public static void main(String[] args) {
// 1024--65535
try {
//1、创建ServerSocket对象,绑定监听端口
ServerSocket ss = new ServerSocket(8888);
System.out.println("服务器已经启动,正在等待连接。。。");
//2、通过accept()方法监听客户端的请求
Socket socket = ss.accept(); // 表示客户端等待连接 会阻塞
//3、连接建立后,通过输入流读取客户端发送的请求信息
InputStream in = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String info = br.readLine();
System.out.println(info);
//4、通过输出流向客户端发送响应的信息
OutputStream out = socket.getOutputStream();
PrintStream ps = new PrintStream(out);
ps.println("demo" + info);
//5、关闭相应的资源
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}