zoukankan      html  css  js  c++  java
  • TCP/udp编程

    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,期待与您共同进步。

  • 相关阅读:
    Linux内核空间-用户空间通信之debugfs
    Mysql 启动失败 报错 1067
    [置顶] hdu3018解题报告--也是白话几笔画学习总结
    【Todo】蒙特卡洛(蒙特卡罗)树 & 卷积网络
    基本分类方法——KNN(K近邻)算法
    SVM(支持向量机)与统计机器学习 & 也说一下KNN算法
    可重入锁 & 自旋锁 & Java里的AtomicReference和CAS操作 & Linux mutex不可重入
    【Todo】Nginx架构学习
    【转载】C++异常机制的学习
    关于协程的学习 & 线程栈默认10M
  • 原文地址:https://www.cnblogs.com/LJTbozai/p/3041400.html
Copyright © 2011-2022 走看看