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();
}
}
实现了:客服端等待连接