1.软件结构

C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。

B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。

2.网络通信协议

网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。这就

好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式、传输速率、传输步骤等做了

统一规定,通信双方必须同时遵守,最终完成数据交换。

TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是

Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它

的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的

协议来完成自己的需求。

TCP协议的三次握手

第一次握手,客户端向服务器端发出连接请求,等待服务器确认。

第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。

第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示。

完成三次握手后,连接建立后,就可以进行数据传输了..

3.网络协议的三要素

协议:计算机网络通信必须遵守的规则

IP地址:指互联网协议地址  ,IP地址用来给一个网络中的计算机设 备做唯一的编号

查看本机IP地址,在控制台输入: ipconfig

检查网络是否连通,在控制台输入:   ping 空格 IP地址   如   ping 220.181.57.216

端口号:用两个字节表示的整数,它的取值范围是0~65535

其中,0~1023之间的端口号用于一些知名的网 络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会 导致当前程序启动失败。

利用 协议 + IP地址 + 端口号 三元组合,就可以标识网络中的进程了,

4.TCP通信程序

两端通信时步骤:

1. 服务端程序,需要事先启动,等待客户端的连接。

2. 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。

Java中,提供了两个类用于实现TCP通信程序:

1. 客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建

立连接开始通信。

2. 服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端

的连接。

TCP通信分析图解

1. 【服务端】启动,创建ServerSocket对象,等待连接。

2. 【客户端】启动,创建Socket对象,请求连接。

3. 【服务端】接收连接,调用accept方法,并返回一个Socket对象。

4. 【客户端】Socket对象,获取OutputStream,向服务端写出数据。

5. 【服务端】Scoket对象,获取InputStream,读取客户端发送的数据。

6. 【服务端】Socket对象,获取OutputStream,向客户端回写数据。

7. 【客户端】Scoket对象,获取InputStream,解析回写数据。

8. 【客户端】释放资源,断开连接。

客服端程序

//客服端程序
import java.io.*;
import java.net.*;
public class ClientTCP{
	public static void main(String[] args) throws IOException{
		System.out.println("客服端:客户端发送数据");
		//创建socket,确定连接到哪里
		Socket client=new Socket("localhost",66);
		OutputStream os=client.getOutputStream();
		os.write("客服端:你好吗,我来了".getBytes());

		//客户端获取服务器的数据
		InputStream in=client.getInputStream();
		byte[] b=new byte[100];
		int len=in.read(b);
		System.out.println(new String(b,0,len));
		in.close();
		os.close();
		client.close();
	}
}

服务器程序

//服务器端程序实现
import java.io.*;
import java.net.*;
public class ServerTCP{
	public static void main(String[] args) throws IOException {
		System.out.println("服务器:服务器启动,等待连接");
		//创建socket对象绑定端口,用于客服端连接的端口使用
		ServerSocket ss=new ServerSocket(66);
		//接受连接accept方法
		Socket server=ss.accept();
		//通过socket 获取输入流
		InputStream is=server.getInputStream();
		//一次性读取数据
		byte[] b=new byte[1024];
		int len=is.read(b);//数据读取到字节数组中
		String msg=new String(b,0,len);//解析数组,打印字符串
		System.out.println(msg);

		//用于服务器向客服端写回数据
		OutputStream out=server.getOutputStream();
		out.write("服务器:你好客服端,感谢你的连接".getBytes());
		out.close();
		is.close();
		server.close();
	}
}

实现了:客服端等待连接