网络编程

UDP
核心API
DatagramSocket 连接通道
DatagramSocket() 从可用的端口号中随机一个
DatagramSocket(String port) 指定端口号
DatagramPacket 传输信息
DatagramPacket(byte[] data,int len,InetAddress,int port) 要发送的数据,发送数据的长度,ip,port

UDP发送端
//创建连接对象
DatagramSocket socket =new DatagramSocket();
//定义传输数据
byte[] data=”你好”.getBytes();
//指定ip
InetAddress ip = InetAddress.getByName(“127.0.0.1”);
//指定端口
int port=6666;
//创建数据包对象
DatagramPacket packet=new DatagramPacket(data,data.length,ip,port);
//发送数据包
socket.send(packet);
//关闭流对象
socket.close();

UDP接收端
//创建连接
DatagramSocket socket =new DatagramSocket(6666);
//定义接受数据大小
byte[] buff=new byte[1024];
//创建接收数据包对象
DatagramPacket packet=new DatagramPacket(buff,buff.length);
//接收数据
socket.receive(packet);
//将数据包数据序列化到字节数组中
byte[] data = packet.getData();
//获取数据大小
int length = packet.getLength();
//将数据转换为可读格式
String res=new String(data,0,length);
//输出转换后的数据
System.out.println(res);
//关闭流对象
socket.close();

TCP
核心对象
Socket 客户端连接对象
Socker(InetAddress ip,int port) 指定ip和服务端的端口
ServerSocket 服务端连接对象
ServerSocket(int port) 指定端口号
流对象
Socket.getOutputStream() 客户端网络输出流对象
Socket.getInputStream() 客户端网络输入流对象
Socket.getOutputStream() 服务端获取的客户端对象的网络输出流对象
Socket.getInputStream() 服务端获取的客户端对象的网络输入流对象
Socket.shotDownOutputStream() 禁用输出流

TCP客户端
//获取ip
InetAddress ip = InetAddress.getByName(“127.0.0.1”);
//创建连接对象
Socket socket = new Socket(ip,7777);
//获取网络输出流对象
OutputStream os = socket.getOutputStream();
//发送数据
os.write(“今天是世界末日”.getBytes());
os.flush();
//获取网络输入流对象
InputStream is = socket.getInputStream();
byte[] data = new byte[1024];
//获取数据
int read = is.read(data);
//数据转换
String res=new String(data,0,read);
//数据输出
System.out.println(res);
//关闭流对象
is.close();
os.close();
socket.close();

TCP服务端
//创建服务端连接对象
ServerSocket serverSocket = new ServerSocket(7777);
//获取客户端连接
Socket socket = serverSocket.accept();
//获取客户端输入流对象
InputStream is = socket.getInputStream();
//读取流数据
byte[] buff = new byte[1024];
int len =is.read();
//转换数据
String res=new String(buff,0,len);
//输入数据
System.out.println(res);
//获取网客户端输出流对象
OutputStream os = socket.getOutputStream();
//发送数据
os.write(“我已经飞升成仙!”.getBytes());
//关闭流对象
os.flush();
os.close();
is.close();
socket.close();
serverSocket.close();


网络编程
套接字 Socket 应用层通过Socket远程发送数据或者远程接收数据。
Socket是传输层供给应用层的编程接口,就是应用层与传输层直接的桥梁

TCP协议是传输层协议
1.传输前先建立连接,请求端(客户端)发送一个包含EYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指名客户端使用的端口以及TCP连接的初始序号。
2.服务器接收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgament)。
3.客户端也返回一个确认报文ACK给服务器端,同时TCP序号被加一。
建立连接完成,开始通信第二步,数据处理

InetAddress类
是JAVA.net包里的类,用来提供网络功能,InetAddress中没有构造方法,包含域名或IP信息
getLocalHost()、getByName() 用来创建InetAddress对象
getLocalHost() 创建本机对象
getByName(IP或域名) 创建这个域名或IP的对象
getHostAddress() 获取当前计算机IP地址
getHostName() 获取当前对象IP的名字

InetSocketAddress类
是JAVA.net包里的类,用来提供网络功能,InetSocketAddress(包含域名或IP信息)和端口号,不依赖任何协议
URL类
URL是标识这些计算机上的资源
new URL() 参数为URL,将哪个URL包装成URL对象
请求-响应模式
Socket类 发送TCP消息(客户端)
ServerSocket类 创建服务器(服务端)
Socket是通讯对象
ServerSocket是连接对象
Socket类,创建客户端需要服务端的IP和服务端监听的端口号
ServerSocket类创建服务端需要一个端口号,用于监听
accept() 该方法用于开启服务器端的监听,监听到后解除阻塞状态
UDP协议
DategramSocket(int Port),创建客户端或服务端对象
接收端端口是指从哪个端口接收数据
发送端端口是指从哪个端口发送数据
send(DategramPacket p) 从此套接字发送数据报包
receive(DategramPacket p)从此套接字接受数据报包
close() 关闭此套接字数据报
DatagramPacket
DatagramPacket(Byte[] buf,int length) 构造数据报包,用来指定长度为length的数据包
(接收数据的数据报包)
DatagramPacket(Byte[] buf,int length,InetAddress address,int port) 构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号(发送数据的数据报包)
new InetSocketAddress(ip,端口)