网络
网络五层模型
物理层
物理层:所有为了搭建网络所使用的物理控件
数据链路层
数据链路层:使设备之间联通
网络层
网络层:给每个设备起到一个标识作用
公网服务器无法主动联系你的电脑,你的电脑可以连接公网服务器,每次重新启动会分配不同的ip
传输层
传输层:以什么样的方式发送
TCP协议:传输控制协议 规定了发送与接受方应该以一种什么样的发式传输数据。
协议特点:面向链接的,有序的,有效的,安全的传输层协议。
应用层
应用层:我发送的怎样的数据
套接字
我们本次使用TCP链接,所以服务器创建的应该是可以接收TCP链接的套接字 套接字:Socket,是网络数据处理的基本工具,负责网络数据的出入口 服务器套接字和普通套接字是有区别的,这里我们实现服务器,所以使用网络工具就是服务器套接字 ServerSocket是JAVA提供的,基于BIO的网络服务器套接字,在java.net这个包里面 创建对象的时候,需要指定ServerSocket中的端口号 port
服务器和客户端连接、对答并关闭
服务器代码:
//服务器的启动以及逻辑
public static void main(String[] args) {
//我们本次使用TCP链接,所以服务器创建的应该是可以接收TCP链接的套接字
//套接字:Socket,是网络数据处理的基本工具,负责网络数据的出入口
//服务器套接字和普通套接字是有区别的,这里我们实现服务器,所以使用网络工具就是服务器套接字
//ServerSocket是JAVA提供的,基于BIO的网络服务器套接字,在java.net这个包里面
//创建对象的时候,需要指定ServerSocket中的端口号 port
try {
ServerSocket ss = new ServerSocket(10086);
//阻塞后面进行
Socket s = ss.accept();
InputStream is = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
OutputStream os= s.getOutputStream();
PrintWriter pw = new PrintWriter(os);
Scanner scanner = new Scanner(System.in);
while(true) {
String str = br.readLine();
System.out.println(str);
if(str.equals("bye")) {
break;
}
String content = scanner.nextLine();
pw.println(content);
pw.flush();
if(content.equals("bye")) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
客户端代码:
//客户端的启动以及逻辑
public static void main(String[] args) {
//127.0.0.1叫做回环地址
try {
Socket skt = new Socket("127.0.0.1", 10086);
OutputStream os = skt.getOutputStream();
PrintWriter pw = new PrintWriter(os);
InputStream is = skt.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
Scanner scanner = new Scanner(System.in);
while(true) {
String content = scanner.nextLine();
pw.println(content);
pw.flush();
if(content.equals("bye")) {
break;
}
String str = br.readLine();
System.out.println(str);
if(str.equals("bye")) {
break;
}
}
}catch (UnknownHostException e){
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}