windows系统是怎样发送和接收数据的,比如说我用UDP通信,调用sendto发送数据后,数据是怎么经过系统发送出去的,是否是先进入一个发送队列,然后系统判断队列有数据,就执行发送,系统发送时是否每次只发送一个包?然后系统收到数据时,是数据先到达系统的接收缓冲,然后系统发送一个消息给应用程序,应用程序在开辟一块内存来接收数据,那如果有两个数据包同时到达,我用revfrom会不会将两个数据包同时读取出来呢?

解决方案 »

  1.   

    socket通讯是有通讯协议的,具体的发送和接收流程,请看具体的通讯协议
      

  2.   

    建议看看  《计算机网络》这本书籍讲解的很清楚!
    基本上tcp/ip几层协议都讲解到了!搞网络的人必备,当然你想深入了解,还需要读linux网络源码,网络是相同的,就像windows的客户端可以访问liunx的网站服务器!
      

  3.   

    嗯,回头去看看,linux网络源码是指linux系统部分的吗,哪里可以下载?
      

  4.   


    是通过winsocket来完成的,winsocket封装了网络通信协议栈,协议栈这个词的准确翻译是指一堆协议,你用哪个就告诉winsocket按哪个协议通信,比如udp,tcp..,绝对不是指内存那个进栈出栈什么的,通信协议只是个规范,实现各不相同的,只要符合规范就可以,都要通过软件硬件配合在整个网络中共同完成的,lz所说的udp就是windows系统所支持的winsock和你所用的网卡及网卡驱动共同完成PC端的实现
    你首先要建立一个winsock实例,成功建立后你只能得到这个winsock的句柄,一切都是通过这个句柄来操控winsock,比如设定通信协议udp,在内存创建这个socket的缓冲区(当然这步是自动的,你不能直接访问这个缓冲区),sendto之后,就是把你要发送的字节送到那个缓冲区,这时你的工作就完成了,之后的事情是不受你控制的,但你可以询问sokcet这时缓冲区的情况,比如缓冲区是否已满,也就是说sendto函数返回后,只表示数据已成功送达本PC的winsock缓冲区
    数据到过缓冲区后就完全按照udp协议在网络上传输,在你这端,一定是先发出你先sendto的数据,但每次发送数据的长度是不固定的,如果网络连通的话,它总会发完的,接收端同理,也是winsock缓冲区最先得到数据,但每次接收长度,顺序是不固定的,这个要你在recv后再处理
      

  5.   


    linux是开源的,你上度娘或者谷姐一定搜得到