tcp udp 区别:
TCP:
优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,
缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,
UDP:
优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,
缺点:如果网络质量不好,就会很容易丢包,不能保证数据的完整性。
应用场景:
tcp:
电话要先拨号建立连接,文件传输,等保证数据完整的场景。
udp:
实时视频会议,屏幕广播等应用,对实时要求比较高的,数据完整性不是那么重要的应用。 <br>编码区别:
tcp 客户端:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MyClient {
public static void main(String[] args) throws Exception{
Socket socket = null ;
BufferedReader in = null ;
PrintWriter out = null ;
BufferedReader input = null ;
// 请求指定ip和端口号的服务器
socket = new Socket( "127.0.0.1" , 3333 );
while ( true ){
in = new BufferedReader( new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true );
// 接收控制台的输入
input = new BufferedReader( new InputStreamReader(System.in));
// out.println("this is client info!");
String info = input.readLine();
out.println(info);
String str = in.readLine();
System.out.println( "客户端显示--》服务器的信息:" + str);
}
//in.close();
//out.close();
}
}
|
服务端:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServices {
public static void main(String[] args) throws Exception{
ServerSocket ss = null ;
Socket socket = null ;
BufferedReader in = null ;
PrintWriter out = null ;
BufferedReader input = null ;
// 监听3333端口
ss = new ServerSocket( 3333 );
// 等待接收客户端的请求
socket = ss.accept();
while ( true ){
// 获取连接对象的输入流
in = new BufferedReader( new InputStreamReader(socket.getInputStream()));
// 获取客户端的输入信息
String str = in.readLine();
input = new BufferedReader( new InputStreamReader(System.in));
System.out.println( "服务器显示-->客户端输入数据:" + str);
out = new PrintWriter(socket.getOutputStream(), true );
// 将数据输出到客户端
// out.println("hehe");
String info = input.readLine();
out.println(info);
}
// in.close();
// out.flush();
// out.close();
}
}
|
UDP
客户端:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPClient {
public static void main(String[] args) throws Exception {
DatagramSocket ds = null ;
DatagramPacket dp = null ;
byte [] buf = new byte [ 1024 ];
ds = new DatagramSocket( 3333 );
dp = new DatagramPacket(buf, 1024 );
// 接收数据,放入数据报
ds.receive(dp);
// 从数据报中取出数据
String info = new String(dp.getData(), 0 , dp.getLength());
System.out.println( "接收到的信息是:" + info);
}
}
|
服务端:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServer {
public static void main(String[] args) throws Exception {
DatagramSocket ds = null ;
DatagramPacket dp = null ;
// 构建发送对象
ds = new DatagramSocket();
// 将数据打包-->打成数据报
String info = "hello world!" ;
dp = new DatagramPacket(info.getBytes(), info.length(), InetAddress.getByName( "localhost" ), 3333 );
// 发出数据报
ds.send(dp);
}
}
|
由代码可以看出:
与TCP程序设计相比较,UDP缺少了connect()、listen()及accept()函数,这是用于UDP协议无连接的特性,不用维护TCP的连接、断开等状态。