1.网络编程介绍
- 七层协议、四层协议
- tcp协议,安全但是慢(传输文件)、udp协议,不安全但是快(手机广告短信)
- ip,局域网中,每台电脑会有自己独立的ip,通过ip可以找到指定的电脑,ipv4、ipv6
- 端口(port),最大到65535,1024以下不要用,因为是给操作系统准备的
- localhost代表本地域名,如果想连本地时可以写本地ip,也可以直接写localhost,域名会被转化为ip,如www.baidu.com是域名,会被转为ip,我们通常记域名不记ip
- ipconfig,查看ip地址
- ping ip地址 -t,如果要停止,按ctrl+c(通常不用加-t)
2.Socket套接字
java提供了api,Socket:套接字,如果和对方连接成功,会各自获取一个socket对象,socket中有自己和对方的一些信息,可以利用socket对象获取输入输出流并进行数据传输
2.1创建服务器并监听
ServerSocket server = new ServerSocket(7171);
//监听是否有客户端连接
System.out.println("监听客户端");
Socket socket = server.accept();
System.out.println("客户端连接成功");
2.2创建客户端并连接服务器
Socket socket = new Socket("localhost",7171);
System.out.println("连接服务器成功");
运行结果如下
2.3模拟服务器和客户端进行信息传输
public class Homework02_服务器和客户端 {
public static void main(String[] args) throws IOException {
//创建一个服务器 模拟林尼
ServerSocket server = new ServerSocket(7171);
//监听是否有客户端连接
System.out.println("监听客户端");
Socket socket = server.accept();
System.out.println("客户端连接成功");
//接收来自客户端的信息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(br.readLine());
//向客户端发送信息
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.write("你好,旅行者,我是林尼,来自枫丹");
pw.flush();
socket.close();
server.close();
}
}
//客户端 模拟旅行者
class Client{
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost",7171);
System.out.println("连接服务器成功");
//向服务器传输信息
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.println("你好,林尼,我是旅行者,来自...");
pw.flush();
//接收来自服务器的信息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(br.readLine());
socket.close();
}
}
运行结果如下
注:
1.br.readLine()
也是一个阻塞方法,它会接收换行符
2.socket.getOutputStream().write("hello\r\n".getBytes());
也可以这样写数据,但是必须要加换行符,否则另一端收不到
3.三次握手四次挥手
- UDP:不安全,快,数据可能丢失
- TCP:数据不丢失
3.1三次握手
- SYN:请求,标志位,同步信号
3.2四次挥手