(-). socket选项和I/O控制命令
1. Socket选项
(1). def – 网络协议是分层,每一层又有不同的协议,因此不同层有不同层的选项,每一层不同协议又有各自的选项。
应用层: SOL_SOCKET
传输层: IPROTO_TCP, IPPROTO_UDP
网络层: IPPROTO_IP
int getsockopt(
SOCKET s, //套接字句柄
int level, //套接字层次
int optname, //套接字选项
char FAR* optval, //缓冲区,请求的值将会被返回到这里存储
int FAR* optlen //指定犯冲去大小
);
int setsockopt (
SOCKET s, //套接字句柄
int level, //套接字层次
int optname, //套接字选项
const char FAR * optval, //制定缓冲区
int optlen //缓冲区大小
);
2. Socket控制命令
def -- I/O控制命令用来控制套接字的行为或者获取套接字上的未决I/O信息
常见命令:
FIONBIO 将套接字设置为非阻塞模式
FIONREAD 获取套接字要读取数据的个数
int ioctlsocket(
_In_ SOCKET s, //[in] A descriptor identifying a socket.
_In_ long cmd, //[in] The command to perform on the socket s.
_Inout_ u_long *argp //[in/out] A pointer to a parameter for cmd.
);
int WSAIoctl(
_In_ SOCKET s,
_In_ DWORD dwIoControlCode,
_In_ LPVOID lpvInBuffer,
_In_ DWORD cbInBuffer,
_Out_ LPVOID lpvOutBuffer,
_In_ DWORD cbOutBuffer,
_Out_ LPDWORD lpcbBytesReturned,
_In_ LPWSAOVERLAPPED lpOverlapped,
_In_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
s [in]
A descriptor identifying a socket.
套接字句柄
dwIoControlCode [in]
The control code of operation to perform.
//套接字控制命令
lpvInBuffer [in]
A pointer to the input buffer.
输入缓冲区
cbInBuffer [in]
The size, in bytes, of the input buffer.
输入缓冲区长度
lpvOutBuffer [out]
A pointer to the output buffer.
输出缓冲区
cbOutBuffer [in]
The size, in bytes, of the output buffer.
输出缓冲区长度
lpcbBytesReturned [out]
A pointer to actual number of bytes of output.
接收实际字节数
lpOverlapped [in]
A pointer to a WSAOVERLAPPED structure (ignored for non-overlapped sockets).
指向重叠结构的结构体(如果没有使用重叠模型,忽视此参数)
lpCompletionRoutine [in]
Note A pointer to the completion routine called when the operation has been completed (ignored for non-overlapped sockets).
当选项被完成后,完成例程被调用,如果没有使用重叠模型,此参数被忽略
(二). 广播通信一般步骤
发送端:
1. 创建套接字
2. 设置套接字选项(SOL_SOCKET,SO_BROADCAST)
3. 向制定端口和广播IP INADDR_BROADCAST或者255.255.255.255发送数据
注:
广播有专用广播地址255.255.255.255或者宏INADDR_BROADCAST,当IP地址指定为广播地址时候可以将数据发送给本地子网的所有机器.
接收端:
1. 创建套接字。
2. 绑定本地Ip和端口。
3. 接收数据
详细代码请参照上传工程:http://download.csdn.net/detail/timeinsist/9874862