您的位置:首页 > 理论基础 > 计算机网络

socket tcp与udp的区别

2012-12-28 22:24 267 查看
socket tcp连接常规流程:

服务器端:

socket-->bind-->listen-->accept->recv(send)-->closesocket

客户端:

sokcet->connect->send(recv)-->closesocket

可以参考:
http://atu82.bokee.com/4667655.html

Udp socket 常规流程

服务器端:

socket-->bind->recvfrom(sendto)-->closesocket

客户端:

socket->sendto(recvfrom)-->closesocket

socket Udp 和tcp的区别:

1)其实Udp客户端也可以调用connect函数,这样就可以使用recv(read)函数接收数据,使用send(write)发送数据;

2)和TCP套接字一样,UDP套接字也通过socket( )函数创建,不同的是UDP套接字可以通过一个套接字描述符在不同的主机之间发送和接

收报文。创建UDP客户端的典型过程为:首先调用socket( )函数,接下来定义发送和接收数据的远程主机和端口,然后将套接字传递给

connect( )函数。套接字描述符在后面会用于发送和接收数据。除此之外,发送数据的目标主机和端口可以在数据“写入”时指定,

这样就可以用一个套接字发送数据到多个主机。

3)UDP数据报的发送可以使用write( )、send( )或sendto( )函数。如果使用write( )或send( ),则必须事先以UDP套接字为参数调用

connect( )函数,此外,如果使用sendto( )函数则可以在发送数据时再指定目标地址及端口。接收UDP数据报可以使用read( )、

recv( )或recvfrom( )函数。如果使用read( )或recv( ),则必须事先调用connect( )函数;如果使用recvfrom( ),则可以在接收

数据报时获得源IP地址和端口。

4)与TCP不同的是,在UDP套接字上收发的数据是作为单独的单元接收或发送的,而不是作为字节流。每次调用write( )、send( )、或

sendto( )函数都会在线路上产生一个UDP数据报。接收到的UDP数据报的读取也是一个单独的操作,如果读取报文时提供的缓冲区长

度不够,则会返回一个出错代码。

5)如果UDP数据报的长度超出了本地或者任意一个必经的网络上的最大片长度,则必须进行分段,这在性能上会有不良影响,因此有些

操作系统对此做了限制或者不予支持。

可以参考:

http://blog.csdn.net/jackychu/article/details/2978811

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: