📅  最后修改于: 2023-12-03 15:10:15.481000             🧑  作者: Mango
本题主要考察程序员对于计算机网络协议的了解,需要掌握 TCP 和 UDP 协议的特点和使用情况。
TCP 协议是传输控制协议,它是一种面向连接、可靠的协议。它通过提供流控制、差错控制和拥塞控制等功能,保证了数据传输的可靠性,也是 Web 服务器的主要传输协议之一。TCP 协议的缺点在于传输速度相对较慢,并且需要维护连接状态,因此在传输大量数据或实时传输时可能会出现问题。
UDP 协议是用户数据报协议,它是一种无连接、不可靠的协议。UDP 协议不提供流控制、差错控制和拥塞控制等功能,因此传输速度较快,但是不保证数据的可靠性。UDP 协议适用于实时传输、音视频传输等场景。
TCP 协议适用于 Web 服务器、电子邮件、文件传输等需要保证数据可靠性的场景。在实时传输、音视频播放等需要快速响应的场景中,UDP 协议更加适用。
例如,当我们使用播放器观看网络视频时,视频内容被分成若干个数据包进行传输,如果使用 TCP 协议,每次丢失一个数据包都需要等待服务器重新传输,这样就会出现视频卡顿的现象;而使用 UDP 协议,即使丢失了几个数据包,也不会对视频的播放造成太大影响。因此,在实时传输场景下,UDP 协议是更加适合的选择。
// TCP 传输示例代码
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception {
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
// UDP 传输示例代码
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception {
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}