UDP协议: 无连接通信协议,当一台计算机向另一台计算机发送数据时,发送端不会确定接收端是否存在,接收端是否收到数据也不会向发送端反馈。
例:QQ留言,视频广播(UDP协议内容大小限制在64kb以内)
TCP协议: 面向连接的通信协议,必须由客户端去连接服务器端才能实现通信,服务器端一般不会主动联系客户端,并且服务器需要先启动去等待客户端连接。
三次握手:
1.客户端向服务端发出连接请求,等待服务器确定
2.服务端向客户端回送一个响应,通知其收到请求
3.客户端再次向服务端发送确认信息,确认连接。
如:下载电影
客户端与服务器的理解:都是电脑,
服务器:提供数据服务,在java中用ServerSocket表示服务器端,服务器需要事先启动,去等待客户端的连接。
客户端:在Java中用Socket类表示。
比如:当我们下载电影的时候,我们的电脑就是客户端,电影的数据源就是服务器,老师上课时的屏幕广播,老师的电脑就是服务器,我们用的就是客户端。
面向网络编程:TCP协议和UDP协议

实现UDP协议的发送端:
package UDP协议;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPsend {
public static void main(String[] args) throws Exception{
byte[] data = "你好UDP".getBytes();
InetAddress inet = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(data, data.length,inet,6000);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
ds.close();
}
}
实现UDP协议的接收端:
package UDP协议;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPrecieve {
public static void main(String[] args) throws Exception{
//创建数据包,传输对象DatagramSocket,绑定端口号
DatagramSocket ds = new DatagramSocket(6000);
//创建字节数组,用于接收发来的数据
byte[] data = new byte[1024];
//创建数据包对象,传递字节数组
DatagramPacket dp = new DatagramPacket(data,data.length);
//调用ds对象方法receive传递数据包
ds.receive(dp);
//获取发送端的IP地址对象
String ip = dp.getAddress().getHostAddress();
//获取发送端的端口号
int port = dp.getPort();
//获取发送端的字节数组个数
int length = dp.getLength();
System.out.println(new String(data,0,length)+" "+ip+" "+port);
}
}
实现TCP协议中客户端和服务器端之间的信息传递:
TCP客户端发送信息给服务器并接收服务器发来的消息:
package TCP协议;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException{
//建立连接
Socket socket = new Socket("127.0.0.1",8888);
//写入需要传输的数据
OutputStream out = socket.getOutputStream();
out.write("服务器OK".getBytes());
//接受服务器的信息
InputStream in = socket.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
System.out.println(new String(data,0,len));
//关闭资源
socket.close();
}
}
服务器端:接收客户端信息并回给客户端一个消息
package TCP协议;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPserver {
public static void main(String[] args) throws IOException{
ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept();
InputStream in = socket.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
System.out.println(new String(data,0,len));
OutputStream out = socket.getOutputStream();
out.write("收到,谢谢".getBytes());
socket.close();
server.close();
}