TCP/IP——网络编程模型

原创 2016年05月30日 11:20:49




TCP/IP——网络编程模型

小狼@http://blog.csdn.net/xiaolangyangyang


一    socket结构体

        struct sockaddr {
                        unsigned short sa_family; /* address族, AF_xxx */
                        char sa_data[14]; /* 14 bytes的协议地址 */
        };
        struct sockaddr_in {
                        short int sin_family; /* Internet地址族 */
                        unsigned short int sin_port; /* 端口号 */
                        struct in_addr sin_addr; /* Internet地址 */
                        unsigned char sin_zero[8]; /* 添0(和struct sockaddr一样大小)*/
        };
        struct in_addr {
                        unsigned long s_addr;
        };

二    socket常用函数

        int socket(int domain, int type, int protocol);
        int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
        int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
        int listen(int sockfd, int backlog);
        int accept(int sockfd, void *addr, int *addrlen);
        int send(int sockfd, const void *msg, int len, int flags);
        int recv(int sockfd, void *buf, int len, unsigned int flags);
        int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen);
        int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);
        close(sockfd);
        int shutdown(int sockfd, int how);
        int setsockopt(int sockfd, int level, int name, char *value, int *optlen);
        int getsockopt(int sockfd, int level, int name, char *value, int *optlen);
        int getpeername(int sockfd, struct sockaddr *addr, int *addrlen);
        retcode = getsockname(socket, name, namelen);
        struct hostent *gethostbyname(const char *name);
        retcode = gethostbyaddr(addr, len, type);
        retcode = getprotobyname(name);
        int fcntl(int fd, int cmd, long arg);

三    初级网络编程模型阻塞I/O模型)

四    Linux下网络编程五种I/O模型

  • 阻塞I/O (blocking I/O)
  • 非阻塞I/O (nonblocking I/O)
  • I/O复用 (select 和poll) (I/O multiplexing)
  • 信号驱动I/O (signal driven I/O (SIGIO))
  • 异步I/O (asynchronous I/O (the POSIX aio_functions))
五  常用的socket初始化
        usr_socket.sin_family = AF_INET;
        usr_socket.sin_addr.s_addr = inet_addr(ip);
        usr_socket.sin_port = htons(port);
        bzero(&(usr_socket.sin_zero), 8);

六  socket编程select/poll/epoll模型原理及代码
        socket()获取阻塞模式的socket -> fcntl()将阻塞模式的socket置为非阻塞模式 -> 清零fd_set,并绑定到socket -> 使用阻塞式的select/poll/epoll轮询,以达到多路复用的作用,提高并发能力
        note1:socket的阻塞模式与select的阻塞模式是不同的,socket非阻塞,阻塞式的select才能轮询
        note2:server端和client端都可以采用select模型
        int socket_fd, result, flags;
        fd_set wset;
        struct timeval tv;
        flags = fcntl(socket_fd, F_GETFL, 0);
        fcntl(socket_fd, F_SETFL, flags|O_NONBLOCK);
        FD_ZERO(&wset);
        FD_SET(socket_fd, &wset);
        tv.tv_sec = 2;
        tv.tv_usec = 0;
        result = select(socket_fd+1, NULL, &wset, NULL, &tv);

参考文献:
linux网络编程之IO模型
select实现server_client聊天测试程序源码
linux 高并发socket通信模型

5种服务器网络编程模型讲解

1.同步阻塞迭代模型 同步阻塞迭代模型是最简单的一种IO模型。 其核心代码如下: 12345678bind(srvfd);listen(srvfd);for(;;){    clif...
  • yuanbinquan
  • yuanbinquan
  • 2015年06月11日 23:10
  • 2834

TCP套接字编程模型

TCP套接字编程经常使用在客户/服务器编程模型(简称C/S模型)中,C/S模型根据复杂度分为简单的客户/服务器模型和复杂的客户/服务器模型。C/S简单客户/服务器模型是一对一关系,一个服务器端某一时间...
  • guoping16
  • guoping16
  • 2011年07月06日 10:38
  • 3745

5种服务器网络编程模型讲解

本文介绍几种服务器网络编程模型。废话不多说,直接正题。 1.同步阻塞迭代模型 同步阻塞迭代模型是最简单的一种IO模型。 其核心代码如下: 12345678bind(srvf...
  • yue19870813
  • yue19870813
  • 2014年09月12日 17:04
  • 1246

windows网络编程5种设计模型详解

  • 2009年10月06日 22:27
  • 833KB
  • 下载

linux-socket tcp客户端服务器编程模型及代码详解

上一篇文章介绍了 TCP/IP相关协议,socket通信流程和涉及到的各种函数:Socket简单理解本篇将具体解释tcp客户端服务器编程模型相关的代码文章分为4个部分:1. TCP客户端服务器编程模型...
  • AXuan_K
  • AXuan_K
  • 2016年08月23日 21:12
  • 3529

socket通信之一:TCP/IP模型与socket

这段时间看了一些网络相关的东西,这里做一个总结吧。参考了很多文章的内容,因为我本身是对着书并且参考网络资源在学习的,在最后会一一列出文章的地址。 这篇文章主要介绍TCP/IP的一些基本知识,...
  • u012501459
  • u012501459
  • 2015年09月02日 14:44
  • 2691

网络编程--IO模型示例

IO模型在Richard Stevens的《UNIX网络编程,第一卷》(程序猿必备!)一书中有非常详尽的描述,以下简要介绍,并给出代码示例。 另外比较好的总结性blog,推荐: 使用异步 I/...
  • yfkiss
  • yfkiss
  • 2012年05月10日 00:25
  • 9247

网络编程模型及网络编程三要素

网络编程模型及网络编程三要素
  • wangyanming123
  • wangyanming123
  • 2016年05月08日 19:13
  • 978

通用通信模型的TCP服务端实现完善

上一篇中的实现没有利用好通信工厂和
  • gongbenwen
  • gongbenwen
  • 2014年10月17日 10:34
  • 822

TCP/IP模型

1.   TCP/IP协议介绍TCP/IP(又称TCP/IP协议簇)是一组用于实现网络互连的通信协议,其名称来源于该协议簇中两个重要的协议(IP协议和TCP协议)。基于TCP/IP的参考模型将协议分成...
  • guoping16
  • guoping16
  • 2011年07月04日 20:21
  • 14374
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP/IP——网络编程模型
举报原因:
原因补充:

(最多只允许输入30个字)