您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 0浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

socket编程 及select poll epoll示例

phymat.nico 发布时间:2017-12-26 00:43:36 ,浏览量:0

[cpp] view plain copy
  1.   

1、关于字节排序    网际协议采用大端字节序,来传输多字节整数。    系统提供了转换的宏定义,如果主机与网际协议相同,则宏定义为空。

2、客户端    socket -> connect(阻塞,三次握手)-> rcv

3、服务器端    socket -> bind -> listen -> accept(阻塞,三次握手)-> send4、函数介绍    

     a..socket        

          1)函数原型 int socket(int family, int type, int protocol)        

          2)参数:                family: 协议族AF_INET,IPv4协议 ...            type : type 套接字类型SOCK_STREAM 字节流套接字            protocol: IPPROCO_TCP IPPROCO_UDP                     IPPROCO_SCTP       

          3)返回值            成功:返回套接字符            错误:返回INVALID_SOCKET(-1)        

         4)示例

[cpp] view plain copy
  1. #include   
  2. #include   
  3. #include   
  4. int main()  
  5. {  
  6.     int socketfd;  
  7.     struct sockaddr_in servaddr;  
  8.   
  9.     if((socketfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)  
  10.     {  
  11.         return -1;  
  12.     }  
  13. }  
             b..connect         1)函数原型 int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen)         2)参数:                 sockfd: socket 函数返回的套接字描述符             servaddr : 服务器的IP和端口             addrlen: 长度(sizeof(servaddr))         3)返回值             成功:0             错误:返回INVALID_SOCKET(-1)         4)示例
[cpp] view plain copy
  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. #include   
  6.   
  7. int main()  
  8. {  
  9.     int socketfd;  
  10.     struct sockaddr_in servaddr;  
  11.   
  12.     if((socketfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)  
  13.     {  
  14.         printf("socket error\n");  
  15.         return -1;  
  16.     }  
  17.   
  18.     bzero(&servaddr, sizeof(servaddr));  
  19.   
  20.     servaddr.sin_addr.s_addr = inet_addr("192.168.0.218");  
  21.     servaddr.sin_family = AF_INET;  
  22.     servaddr.sin_port = htons(55000);  
  23.   
  24.     if(connect(socketfd, (struct sockaddr*) &servaddr, sizeof(servaddr)) 0:描述符就绪的总位数         错误:返回INVALID_SOCKET(-1)     4)包含头文件: include include     5)示例
    [cpp] view plain copy
    1. /* 实现功能:通过select处理多个socket 
    2.  * 监听一个端口,监听到有链接时,添加到select的w. 
    3.  */  
    4. #include "select.h"  
    5. #include   
    6. #include   
    7. #include   
    8. #include   
    9. #include   
    10. #include   
    11.   
    12. typedef struct _CLIENT{  
    13.     int fd;  
    14.     struct sockaddr_in addr; /* client's address information */  
    15. } CLIENT;  
    16.   
    17. #define MYPORT 59000  
    18.   
    19. //最多处理的connect  
    20. #define BACKLOG 5  
    21.   
    22. //最多处理的connect  
    23. CLIENT client[BACKLOG];  
    24.   
    25. //当前的连接数  
    26. int currentClient = 0;   
    27.   
    28. //数据接受 buf  
    29. #define REVLEN 10  
    30. char recvBuf[REVLEN];  
    31. //显示当前的connection  
    32. void showClient();  
    33.   
    34. int main()  
    35. {  
    36.     int i, ret, sinSize;  
    37.     int recvLen = 0;  
    38.     fd_set readfds, writefds;  
    39.     int sockListen, sockSvr, sockMax;  
    40.     struct timeval timeout;  
    41.     struct sockaddr_in server_addr;  
    42.     struct sockaddr_in client_addr;  
    43.   
    44.     for(i=0; i
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.1158s