TCP/IP网络编程

  • 一、概念:

  1. 套接字:传输网络数据的软件设备。
  2. TCP的特点:可靠的、按序传递的、基于字节的面向连接的数据传输方的协议。传输过程中数据不会消失,按序传输数据,传输的数据不存在数据边界。
  3. UDP的特点:不可靠的、无序的、以数据高速传输为目的的协议。强调快速传输而非传输顺序,传输的数据可能丢失也可能损坏,传输的数据有数据边界,限制每次传输的大小。
  4. 网络模型(四层):应用层、TCP或UDP层、IP层、网络层。
  5. 三次握手,四次挥手。
  6. 半关闭状态:关闭一半的套接字缓存区,即关闭写缓存或者读缓存。
  7. 多播,广播:广播只能向同一网络(IP地址)内的主机发送消息,多播可以向不同网络的主机发送消息。
  8. IP地址分类。
  9. I/O复用:提高I/O使用效率的技术,Linux下主要有select和epoll。
  10. 条件触发和边缘触发。
  11. 大端序,小端序。
  12. 进程,多进程,僵尸进程,进程间通信。
  13. 线程,多线程。
  • 二、创建接受连接请求的套接字(TCP)

  1. 调用socket函数,创建套接字。
  2. 调用bind函数,申请IP地址和端口号。
  3. 调用listen函数,使套接字变为可接受连接请求的状态。
  4. 调用accept函数,接受连接请求。
  5. 调用close函数,关闭套接字。
  • 三、发送连接请求(TCP)

  1. 调用socket函数,创建套接字。
  2. 调用connect函数,发送连接请求。
  3. 调用close函数,关闭套接字。
  • 四、相关头文件

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <string.h>
    #include <pthread.h>
    #include <sys/epoll.h>
    #include <sys/select.h>
    #include <signal.h>

     

  • 五、相关类和函数

  1. int socket (int __domain, int __type, int __protocol);
  2. struct sockaddr_in; 
  3. struct sockaddr; 
  4. int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
  5. int listen (int __fd, int __n);
  6. int accept (int __fd, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len);
  7. int shutdown (int __fd, int __how);
  8. int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
  9. int close (int __fd);
  10. setsockopt (int __fd, int __level, int __optname, const void *__optval, socklen_t __optlen); // 套接字设置
  11. ssize_t read (int __fd, void *__buf, size_t __nbytes); // 接受数据,阻塞
  12. ssize_t write (int __fd, const void *__buf, size_t __n); // 发送数据
  13. uint16_t htons (uint16_t __hostshort); // 转换端口号,处理大端序小端序号
  14. uint32_t htonl (uint32_t __hostlong); // 转换IP地址,处理大端序小端序号
  15. in_addr_t inet_addr (const char *__cp); // 转换IP地址
  16. struct hostent *gethostbyname (const char *__name);
  17. (select相关)
  18. fd_set;
  19. FD_ZERO(fd_set*);
  20. FD_SET(int fd, fd_set*);
  21. FD_CLR(int fd, fd_set*);
  22. int select (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, struct timeval *__restrict __timeout);
  23. (epoll相关)
  24. struct epoll_event;
  25. int epoll_create (int __size);
  26. int epoll_wait (int __epfd, struct epoll_event *__events, int __maxevents, int __timeout);
  27. int epoll_ctl (int __epfd, int __op, int __fd, struct epoll_event *__event);
  28. (下面的UDP)
  29. ssize_t sendto (int __fd, const void *__buf, size_t __n, int __flags, __CONST_SOCKADDR_ARG __addr, socklen_t __addr_len);
  30. ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len);

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值