1.软件结构
C/S结构(Client:Server)
B/S结构(Browser:Server)
2.网络通信协议
传输控制协议/因特网互联协议:
3.协议分类
(1) TCP(传输控制协议):类似打电话,对方只有接收到电话,才能传达信息。可靠(TCP的三次握手原则)
(2) UDP(用户数据协议):类似一种广播性质,不管有没有接收到信息,我只管广播。不可靠。
虽然UDP是不可靠,但是特性满足视频会议,QQ聊天等。
它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。
4.网络编程三要素
(1) 协议:通信规则。
(2) IP地址:互联网协议地址,类似我们现实生活中的身份证。
IP地址分类:IPv4、IPV6
(3) 端口号:一台计算机在网络当中进行通信时,一个应用程序与另一个程序的数据连接出入口。
5.TCP通信程序
(1)如果要想实现两台计算机数据交互,必须严格区分 Client 与 Server;
(2)Server 先行启动,等待 client 连接;
(3)Cilenet 主动连接 Server ,连接才能成功,服务端不可以主动连接客户端;
6.Socket
实现通信的两个类
1.java.net.Socket
2.java.net.ServerSocket
概念
该Socket类实现客户端套接字,套接字指的是两台设备的之间的通讯的端点。
*套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程*
成员方法
public InputStream getInputStream() : 返回此套接字的输入流。
public OutputStream getOutputStream() : 返回此套接字的输出流。
public void close() :关闭此套接字。
public void shutdownOutput() : 禁用此套接字的输出流。
6.Socket案例
Server端
public class ServerTCP {
public static void main(String[] args) throws IOException {
System.out.println("服务端启动 , 等待连接 .... ");
// 1.创建 ServerSocket对象,绑定端口,开始等待连接
ServerSocket ss = new ServerSocket(6666);
// 2.接收连接 accept 方法, 返回 socket 对象.
Socket server = ss.accept();
// 3.通过socket 获取输入流
InputStream is = server.getInputStream();
// 4.一次性读取数据
// 4.1 创建字节数组
byte[] b = new byte[1024];
// 4.2 据读取到字节数组中.
int len = is.read(b);
// 4.3 解析数组,打印字符串信息
String msg = new String(b, 0, len);
System.out.println(msg);
//5.关闭资源.
is.close();
server.close(); }
}
Clinet
public class ClientTCP {
public static void main(String[] args) throws Exception {
System.out.println("客户端 发送数据");
// 1.创建 Socket ( ip , port ) , 确定连接到哪里.
Socket client = new Socket("localhost", 6666);
// 2.获取流对象 . 输出流 OutputStream
os = client.getOutputStream();
// 3.写出数据.
os.write("你好么? tcp ,我来了".getBytes());
// 4. 关闭资源 .
os.close();
client.close();
}
}