TCP与UDP比较


通信中涉及的知识太多,下面主要说一下TCP与UDP的区别以及各自的优势。

同信的程序分为两种:
1.基于TCP协议:Socket,可靠的服务,通过服务器和客户端之间的通道进行通信

TCP程序需要java的两个包支持:
java.net.*:主要提供网络服务
ServerSocket类:服务器端程序
Socket类:客户端程序
java.io.*:传递信息流

服务器端的建立:
步骤:1.创建一个带有绑定端口的服务器
      2.等待客户端连接(此处会阻塞,这也是后面为什么要启动线程来创建客户端的原因)
      3.获取流进行通信。
这是最基本的建立过程,当然还有很多不足。
import java.io.* ;
import java.net.* ;

public class TCPServer
{
public static void main(String args[]) throws Exception
{
// 使用ServerSocket
ServerSocket server = null ;
// 每一个用户在程序中就是一个Socket
Socket client = null ;
server = new ServerSocket(8888) ;
// 等待客户端连接
client = server.accept() ;
// 向客户端打印信息:HELLO MLDN
PrintWriter out = null ;
// 准备向客户端打印信息
out = new PrintWriter(client.getOutputStream()) ;
out.println("HELLO MLDN") ;
out.close() ;
client.close() ;
server.close() ;
}
}

客户端建立:
步骤:1.创建客户端(需知道服务器的IP地址和端口号)
      2.获取流进行通信
import java.io.* ;
import java.net.* ;
public class TCPClient
{
public static void main(String args[]) throws Exception
{
// 表示一个客户端的Socket
Socket client = null ;
// 表示一个客户端的输入信息
BufferedReader buf = null ;
client = new Socket("localhost",8888) ;
buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
System.out.println(buf.readLine()) ;
buf.close() ;
client.close() ;
}
}

上述是TCP的建立过程,它的特点是通信之前需要服务器和客户端进行连接,在服务器和客户端之间相当于有一个管道,

信息通过管道进行传递,这也体现了它安全的特点,在启动时一定要先启动服务器,再启客户端,否则客户端会找不到

服务器,也就无法通信。

2.基于UDP协议:不可靠,短信功能。
需要的类:
DatagramSocket
DatagramPacket
服务器端的建立:
public class DatagramSender {
public static void main(String args[]) throws Exception {
//1.创建要用来发送的本地地址对象
SocketAddress localAddr = new InetSocketAddress("192.168.1.147",13000);
//2.创建发送的Socket对象
DatagramSocket dSender = new DatagramSocket(localAddr);
int count=0;
while(true){
// 创建要发送的数据,字节数组
count++;
//3.要送送的数据
byte buffer[] = (count+"-hello").getBytes();
//4.发送数据的目标地址和端口
SocketAddress destAdd = new InetSocketAddress("192.168.1.149",14000);
//5.创建要发送的数据包,指定内容,指定目标地址
DatagramPacket dp = new DatagramPacket(buffer, buffer.length,destAdd);
dSender.send(dp);//6.发送
System.out.println("数据己发送: "+count);
Thread.sleep(1000);
}
}
}
客户端的建立:
public class DatagramReciver {
public static void main(String args[]) throws Exception {
//1.创建要用来发送的本地地址对象
SocketAddress localAddr = new
InetSocketAddress("192.168.1.149", 14000);
//2.接收的服务器UDP端口
DatagramSocket recvSocket = new DatagramSocket(localAddr);
while(true){
//3.指定接收缓冲区大小
byte[] buffer = new byte[20];
//4.创建接收数据包对象,指定接收大小
DatagramPacket packet = new DatagramPacket(buffer,
buffer.length);
//5.阻塞等待数据到来,如果收到数据,存入packet中的缓冲区中
System.out.println("UDP服务器等待接据:"+recvSocket.getLocalSocketAddress());
recvSocket.receive(packet);
//得到发送方的ip和端口
SocketAddress address = packet.getSocketAddress();
//转换接收到的数据为字符串
String msg=new String(packet.getData()).trim();
//接收到后,打印出收到的数据长度
System.out.println("recv is:"+msg+" from:"+address);
}
}
}
上面是UDP建立的过程,与TCP相比,它的建立不用在服务器和客户端之间取得联系,只需要知道要发送的目的地和端口即

可,它比较类似于发短信,只需要知道对方的手机号码,不关心对方的手机是否开机,而TCP类似打电话,只有在对方接

通电话时才可以进行通信,否则将处于等待状态(阻塞)。它传递信息是以包的形式进行传递,所以在传输一些文件时

会比TCP传递的更快。启动时可随意启动,但如果先启动服务器,会出现丢包的现象,所以,如何抓包是我们要考虑的问

题。

由于TCP是一种面向连接的协议,所以,在使用TCP通信时,双方需要首先建立连接再进行通信,这需要花费一定的建立

连接的时间。但是在建立连接之后,双方就可以像电话联系那样准确、同步地进行通信。而使用UDP通信时,由于UDP是

一种无连接的协议,所以,可以随时进行收/发数据报,因此速度较快。但是这种通信方式是一种不可靠的通信方式,

数据报可能被丢失、延误等等。

这两种通信方式有各自的特点,因此,它们被应用在不同的领域之中。总的来说, TCP是一种可靠的协议,所以它被广

泛应用在文件传输、远程连接等需要数据被可靠传输的领域;UDP比TCP相对简单且容易管理,它被应用在一些局域网系

统的应用程序中。
[/align][align=left]
[align=left][/align]

猜你喜欢

转载自lsx111.iteye.com/blog/1706765