一、网络编程概述
什么是计算机网络把不同区域的计算机(广义)通过通信设备和线路连接,可以实现数据的传输和共享的系统。实现不同计算机之间的练习,必须有介质连接。网络编程是干什么的聊天-->聊天软件 QQjava语言是支持网络间的数据传输的,将底层的细节都封装起来了,给程序员提供了一套标准的类库,可以很方便的使用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);//端口号1234System.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();}}
}