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数据报的长度超出了本地或者任意一个必经的网络上的最大片长度,则必须进行分段,这在性能上会有不良影响,因此有些
操作系统对此做了限制或者不予支持。
更多嵌入式linux及编程学习交流的文章,请访问我的个人网站”恩享网” :http://www.enxiang.icoc.cc,期待与您共同进步。