一、网络编程概述
什么是计算机网络 把不同区域的计算机(广义)通过通信设备和线路连接,可以实现数据的传输和共享的系统。 实现不同计算机之间的练习,必须有介质连接。 网络编程是干什么的 聊天-->聊天软件 QQ java语言是支持网络间的数据传输的,将底层的细节都封装起来了,给程序员提供了一套标准的类库,可以很方便的使用java语言开发出进行网络通信的软件
网络编程: 借助计算机网络实现我们所写的程序可以在不同的电脑上进行数据传输
网络编程的核心问题 如何找到网络世界上的目标主机,以及目标软件 win+r -->cmd-->ipconfig 查看自己电脑的ip 如何安全可靠的进行数据传输-->协议 规则
网络模型 OSI参考模型:理性化标准模型 分成七层 TCP/IP参考模型 实际使用的参考模型 实际分为四层: 应用层(http) ⬇ 运输层(协议) ^逐层解析 ⬇ | 网络层(IP) | ⬇ | 物理层(硬件、网卡)-->物理层
通信要素:ip 端口 协议 ip: IP地址是指互联网协议地址,又译为网际协议地址 网络中的计算机使用IP地址来进行唯一标识. 在Windows系统下,打开cmd,输入命令ipconfig,按回车即可查看(局域网) 连接到服务器,会自动分配ip 本地回环地址(hostAddress):127.0.0.1 ,它代表设备的本地虚拟接口 端口: 0--1024是被系统使用或保留的端口号,0——65535是有效端口号 我们在定义的时候需要定义1025——65535之间的端口,端口号不可与已有端口冲突 协议(规则、规范、约定): 规定传输速率,代码结构,出错后如何应对等等规则 传输层的重要协议: 传输控制协议TCP: 客户端向服务器发送数据前,首先要建立连接(测试网络是否通畅) 正是传输数据 断开前还要相互确认 可靠安全但效率相对低 TCP三次握手: 先向服务器发送请求 服务器收到请求后会给客户端回应 客户段为服务器的回应做确认的回应,告知服务器客户端收到了服务器的回复开始传输数据 TCP四次挥手: 客户端向服务器发送断开请求 服务器向客户端做出回应 服务器把没传完的数据传输完毕,再向客户端做出回应 客户端向服务器的回应做出回应 用户数据报协议UDP: 报要发送的数据封装成数据报(数据包) 数据报包含数据,对方IP,对方端口,只管发送即可,是否发送成功不明确 效率相对高但不可靠,可能会丢数据
二、Tcp传输协议实现
服务端
package com.wbc.Internet.homework.TCP;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Severs {
static Scanner scanner =new Scanner(System.in);
public static void main(String[] args) {
try {
ServerSocket serverSocket =new ServerSocket(1234);//端口号1234
System.out.println("服务器创建成功");
Socket socket =serverSocket.accept();
System.out.println("客户端连接成功");
while(true){
java.io.DataInputStream inputStream =new DataInputStream(socket.getInputStream());
System.out.println("对方正在输入中……");
String s =inputStream.readUTF();
System.out.println("客户端:"+s);
DataOutputStream outputStream =new DataOutputStream(socket.getOutputStream());
String s1 =scanner.next();
System.out.println("待输入……");
outputStream.writeUTF(s1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
package com.wbc.Internet.homework.TCP;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class Clients {
static Scanner scanner =new Scanner(System.in);
public static void main(String[] args) {
try {
Socket socket =new Socket("127.0.0.1",1234);//本地回环测试
System.out.println("客户端连接成功");
while(true){
DataOutputStream outputStream =new DataOutputStream(socket.getOutputStream());
System.out.println("待输入……");
String s =scanner.next();
outputStream.writeUTF(s);
DataInputStream inputStream =new DataInputStream(socket.getInputStream());
System.out.println("对方正在输入……");
String s1=inputStream.readUTF();
System.out.println("服务器:"+s1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}