TCP
TCP是面向连接的协议,即在传输数据前先发送端和接收端建立逻辑连接,然后在传输数据,它提供了两台计算机之间可靠、无差错的数据传输。
在TCP连接中必须明确客户端和服务器端,由客户端向服务器端发送连接请求。每次连接的创建都需要经过三次握手:第一次握手,客户端向服务器端发送连接请求,等待服务器端确认;第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求;第三次握手,客户端向服务器端发送确认信息。
因为TCP拥有面向连接的特性,所以它可以保证传输数据的安全性,是一个被广泛使用的协议。
UDP
UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,就是当一台计算机向另一台计算机发送数据时,发送端不会确认接收端是否存在就会发出数据;同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
由于UDP协议消耗资源小,通信效率高,UDP协议通常用于音频,视频的传输。但在传输重要数据时不建议使用UDP协议。
TCP通信
在JDK中提供了两个用于实现TCP程序的类,一个是ServerSocket类,用于表示服务端,另一个是Socket类用于表示客户端。
ServerSocket
构造方法:
ServerSocket(int port) 以端口port创建ServerSocket对象,并等待客户端的请求。
常用方法:
Socket accept() 用于等待客户端的连接,在连接之前一直处于阻塞状态。如果有客户端连接会返回一个Socket对象。
Socket
构造方法:
Socket(String host,int port) 用于在客户端以指定的主机名和端口号创建一个Socket对象,并向服务器发起请求连接
常用方法:
int getPort() 用于获取Socket对象与服务器连接的端口号
void close() 用于关闭close连接,结束本次通信
public class Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(9999);Socket socket = serverSocket.accept();System.out.println("客户端连接");InputStream in = socket.getInputStream(); //字节流OutputStream out = socket.getOutputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in));String str = br.readLine();System.out.println("客户端发消息"+str);br.close();out.close();in.close();}
}
import java.io.*;
import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {Socket socket = new Socket("127.0.0.1",9999);InputStream in = socket.getInputStream(); //字节流OutputStream out = socket.getOutputStream();BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));bw.write("服务器。你好");bw.newLine();bw.flush();bw.close();out.close();in.close();}
}