Windows的网络编程-之三-面向无连接的协议
来源:互联网 发布:数据库方言 编辑:程序博客网 时间:2024/06/06 02:06
1 面向无连接的协议
先用socket( )或WSASocket()建立套接字,再把新创建的套接字和网络接口bind( )。和面向连接的套接字不同的是,我们不必调用listen( )和accept( ),直接发送或接收数据:
1.1 接收端
intrecvfrom( SOCKET s, char* buf, int len, int flags,
structsockaddr* from, int* fromlen );
intWSARecvFrom( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
LPDWORDlpNumberOfBytesRecvd, LPDWORD lpFlags,
structsockaddr* lpFrom, LPINT lpFromlen,
LPWSAOVERLAPPEDlpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINElpCompletionRoutine
);
1.2 发送端
intsendto( SOCKET s, const char* buf, int len, int flags,
conststruct sockaddr* to, int tolen );
intWSASendTo( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
LPDWORDlpNumberOfBytesSent, DWORD dwFlags,
conststruct sockaddr* lpTo, int iToLen,
LPWSAOVERLAPPEDlpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINElpCompletionRoutine
);
1.3 面向无连接的套接字的特点
面向无连接的协议几乎都是基于消息的协议,因此面向无连接的套接字也可以称为基于消息的套接字。需要注意以下几点:
在发送端,由于面向消息的协议对数据边界有保护,所以提交给发送函数的数据如果未能完全发送,发送函数就会返回错误。
在接收端,接收函数必须提供一个足够大的缓冲空间。如果提供的缓冲不够接收整个消息,接收函数就会返回错误。发生这种情况时,缓冲区会尽力接收数据,但未收完的数据会被丢弃。当然,如果使用的协议支持部分消息,就可用MSG_PARTIAL标志来避免数据的丢失。
综上所述,对于面向无连接的套接字来说,一次发送对应一次接收,发送和接收之间具有一一对应的关系。
注意:UDP套接字并不真正和网络接口绑定在一起。而是建立一种联系,即绑定的IP接口成为发送UDP数据报的源IP地址。路由表才真正决定数据报在哪个物理接口上发送出去。如果不调用bind( ),而是先调用sendto()或WSASendTo( )进行连接,网络堆栈就会根据路由表自动选出最佳IP地址,如果之前先执行了bind( ),源IP地址就会有误。
1.4 释放套接字资源
因为面向无连接的协议没有连接,所以也不会有正式的关闭。在接收端或发送端结束收发数据时,它只是在套接字上调用closesocket( ),便释放了为套接字分配的相关资源。
- Windows的网络编程-之三-面向无连接的协议
- Windows的网络编程-之二-面向连接的协议
- Windows网络编程之面向连接的Socket编程
- Windows网络编程之面向非连接的Socket编程
- 面向UDP的无连接的C++网络编程
- Linux C编程--网络编程3--面向无连接的网络编程
- 基于 TCP (面向连接)和无连接UDP协议的 socket 套接字编程
- CLNP-无连接网络协议的基本概念
- UDP(面向无连接)的socket编程
- Linux网络编程——无连接和面向连接协议的区别
- Linux网络编程——无连接和面向连接协议的区别
- 【Linux网络编程】无连接和面向连接协议的区别
- Linux网络编程——无连接和面向连接协议的区别
- 网络编程Socket之UDP(二)面向“连接”的UDP
- iOS 网络编程之TCP/IP <三> 协议的定制
- 基于面向连接和无连接的socket编程
- 面向连接(TCP)的网络编程
- Linux socket之三:面向无连接的socket通信&&sokcet超时处理
- Windows的网络编程-之一-WinSock基础
- SVN服务器与客户端的配置
- 准双向口和双向口的区别
- Oracle的闪回特性之恢复truncate删除表的数据
- Windows的网络编程-之二-面向连接的协议
- Windows的网络编程-之三-面向无连接的协议
- 我的2011--领导者与研发流程感悟
- C++项目中的extern "C" {}
- 概率、先验概率、后验概率
- Windows的网络编程-之四-套接字模型
- Windows的网络编程-之五-套接字选项和I/O控制
- kinect 学习笔记二(深度图像的利用--抠取用户躯体)
- Mark 一个类...一个很简单的二叉查找树...
- Windows中的字符类型和数据类型