2017年5月22日星期一

socket1网络编程

Windows 上提供了5种IO模型:
1. 选择(select)
2. 异步选择(WSAAsyncSelect)
3. 事件选择(WSAEventSelect)
4. 重叠IO(OverlappedIO)
5. 完成端口(Completion Port)
## 1.选择
### select函数原型:
```c#
int select(
  _in intnfds,//linux使用,win为了兼容
  _in_out fd_set* readfds,//检查套接字的可读性
  _in_out fd_set* writefds,//检查套接字的可写性
  _in_out fd_set* exceptdfs,//检查套接字有无意外
  _in const struct timeval* timeout //超时标识
  );
```
由于fd_set结构的限制,每次最多只能监视64个套接字
更多需要多线程
超时问题:

```
struct timeval {
  long    tv_sec;         // seconds
  long    tv_usec;        // and microseconds
};
```
套接字传输流程
1.建立和服务器的链接
监理一个结构体server_in:
typedef struct _SOCKET_ADDRESS {
  LPSOCKADDR     lpSockaddr ;
  INT            iSockaddrLength ;
} SOCKET_ADDRESS, *PSOCKET_ADDRESS;
然后用connect(Socket,&server_in,sizeof(SOCKET_ADDRESS))进行连接
02 00 08 82,2d 20 1c d6
分别对应2178(882)和45.32.28.214

2.保持连接并处理缓存区
死循环,保证一直链接
不断选择(select)套接字(Socket),不断接受(recv),直至完成。

没有评论:

发表评论