zoukankan      html  css  js  c++  java
  • 网络套接字编程介绍---UDP通信

    知识内容:

      1.UDP通信编程流程

      2.套接字接口介绍

    一、UDP通信编程

      1.创建套接字
      >>在内核中创建一个socket结构体,返回一个文件描述符作为操作句柄,用于使进程与网卡之间建立联系
      2.为套接字绑定地址信息
      >>在内核的socket结构体中添加描述信息(地址信息),告诉操作系统自己使用了哪个地址和端口,操作系统收到发往这个地址和端口的数据之后,则放入这个socket的接收缓冲区中(将这个对应的数据交给这个进程去做)
      3.发送数据信息
      >>将数据拷贝到内核中的socket发送缓冲区中(操作系统会取出数据进行层层协议封装,将其发送出去)
      4.接收数据
      >>进程通过操作句柄从内核的socket接收缓冲区中取出已经接收到的数据(操作系统已经完成了传输层以下的数据分用)
      5.关闭套接字
      >>关闭套接字,释放调用的资源

    二、套接字接口介绍

      1.创建套接字
      int socket (int domain, int type, int protocol);
        demain:地址域,即不同的网络地址结构---AF_INET:IPv4地址域
        type:套接字类型< 流式套接字 / 数据报套接字 >
          流式套接字:有序的,可靠的,双向的,基于连接的字节流传输---SOCK_STREAM
          数据报套接字:无连接,不可靠,有最大长度限制的传输---SOCK_DGRAM
        protocol:使用的协议,0---不同套接字类型下的默认协议,
          流式套接字---tcp---IPPOTO_TCP
          数据报套接字---udp---IPPOTO_UDP
        返回值:返回套接字的操作句柄,即文件描述符

      2.为套接字绑定地址信息
      int bind (int sockfd, strcut sockaddr* addr, socklen_t len);
        sockfd:创建套接字时返回的操作句柄(文件描述符)
        *addr:要绑定的地址结构信息
        len:地址信息的长度
        返回值:成功返回0,失败返回-1

      3.发送数据
      int sendto(int sockfd, char* data, int data_len, int flag, struct sockaddr* dest_addr,

            socklen_t addr_len);
        sockfd:创建套接字时返回的操作句柄(文件描述符)
        data:要发送数据的首地址
        data_len:要发送数据的长度
        flag:选项参数,一般默认选0,表示当前操作为阻塞操作;MSG_DONTWAIT--当前操作为非阻塞操作
            若发生数据时,socket发送缓冲区已经满了,则0默认阻塞等待,MSG_DONTWAIT立即返回报错
        返回值:成功返回实际发送数据的数据字节数,失败返回-1

      4.接收数据
      int revcfrom(int sockfd, char* buf, int len, int flag,
        struct sockaddr* src_addr, socklen_t addr_len);
        sockfd:创建套接字时返回的操作句柄(文件描述符)
        buf:用户态缓冲区的首地址,用于存放接收到的数据,从内核socket,接收缓冲区中取出数据放入 这个buf用户缓冲区中
        len:用户想要读取的数据长度,但是不能大于buf缓冲区的长度
        flag:选项参数,一般默认选0,表示当前操作为阻塞操作;MSG_DONTWAIT--当前操作为非阻塞操作
        src_addr:接收到数据的发送端地址(服务端地址),
        addr_len:输入输出型参数,用于指定想要获取多长的地址信息;获取地址之后,用于返回地址信息 的实际长度
        返回值:成功返回实际接收到数据的数据字节长度,失败返回-1

      5.关闭套接字
      int close (int fd);

  • 相关阅读:
    Treap 树堆 容易实现的平衡树
    (转)Maven实战(二)构建简单Maven项目
    (转)Maven实战(一)安装与配置
    根据请求头跳转判断Android&iOS
    (转)苹果消息推送服务器 php 证书生成
    (转)How to renew your Apple Push Notification Push SSL Certificate
    (转)How to build an Apple Push Notification provider server (tutorial)
    (转)pem, cer, p12 and the pains of iOS Push Notifications encryption
    (转)Apple Push Notification Services in iOS 6 Tutorial: Part 2/2
    (转)Apple Push Notification Services in iOS 6 Tutorial: Part 1/2
  • 原文地址:https://www.cnblogs.com/bj3251101/p/13221930.html
Copyright © 2011-2022 走看看