TCP/UDPjava
时间: 2024-12-27 17:11:59 浏览: 4
### Java 中 TCP 和 UDP 的实现与区别
#### 一、TCP 和 UDP 的基本概念
TCP 是一种面向连接的协议,具有建立和拆除连接的功能,能够保证数据流的顺序性和正确性[^1]。相比之下,UDP 不需要建立连接,也不维护任何状态信息,因此其传输速度更快,效率更高,但也意味着它不具备像 TCP 那样的可靠传输特性[^5]。
#### 二、Java 中 TCP 和 UDP 编程基础
在 Java 中,可以通过 `ServerSocket` 类来创建服务器端套接字,并监听指定端口上的客户端请求;而客户端则可以使用 `Socket` 类发起连接并发送接收数据。对于基于 UDP 协议的应用程序来说,则主要依赖于 `DatagramSocket` 及 `DatagramPacket` 这两个类来进行消息传递操作[^2]。
#### 三、示例代码展示
以下是简单的 TCP 客户端和服务端以及 UDP 发送方和接收方的例子:
##### (1) TCP Server Example
```java
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args)throws IOException{
int port = Integer.parseInt(args[0]);
try(ServerSocket serverSocket=new ServerSocket(port)){
Socket socket=serverSocket.accept();
BufferedReader inputFromClient=
new BufferedReader(new InputStreamReader(socket.getInputStream()));
DataOutputStream outputToClient =
new DataOutputStream(socket.getOutputStream());
String clientSentence=inputFromClient.readLine();
System.out.println("Received from Client:"+clientSentence);
String capitalizedSentence=clientSentence.toUpperCase()+"\n";
outputToClient.writeBytes(capitalizedSentence);
}
}
}
```
##### (2) TCP Client Example
```java
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[]args)throws Exception{
String sentence;
BufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket=new Socket("localhost",Integer.parseInt(args[0]));
DataOutputStream outToServer=new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer=new BufferedReader(
new InputStreamReader(clientSocket.getInputStream())
);
sentence=inFromUser.readLine();
outToServer.writeBytes(sentence+"\n");
System.out.println("FROM SERVER: "+inFromServer.readLine());
clientSocket.close();
}
}
```
##### (3) UDP Sender Example
```java
import java.net.*;
public class UDPSender {
public static void main(String[] args){
try(DatagramSocket ds=new DatagramSocket()){
InetAddress ip=InetAddress.getByName("localhost");
byte buf[]= "Hello UDP".getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,ip,9786);
ds.send(dp);
}catch(Exception e){e.printStackTrace();}
}
}
```
##### (4) UDP Receiver Example
```java
import java.net.*;
public class UDPReceiver {
public static void main(String[] args){
try(DatagramSocket ds=new DatagramSocket(9786)){
byte buffer[]=new byte[1024];
DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
ds.receive(packet);
String receivedData=new String(packet.getData(),0,packet.getLength());
System.out.println(receivedData);
} catch(SocketException se){
se.printStackTrace();
} catch(IOException ie){
ie.printStackTrace();
}
}
}
```
阅读全文