zoukankan      html  css  js  c++  java
  • 套接字编程,创建套接字socket

    1、套接字地址结构:

    struct sockaddr {
      sa_family_t sa_family;
      char sa_data[14];
    };

    其中,成员sa_family表示套接字的协议族类型,对应于TCP/IP协议该值为AF_INET;成员sa_data存储具体的协议地址。

    sa_data之所以被定义成14个字节,因为有的协议族使用较长的地址格式。一般在编程中并不对该结构体进行操作,

    而是使用另一个与它等价的数据结构:sockaddr_in

    每种协议族都有自己的协议地址格式,TPC/IP协议族的地址格式为结构体struct sockaddr_in

    他在netinet/in.h头文件中定义。

    struct sockaddr_in
    {
      unsigned short   sin_family;

      unsigned short   sin_port;
      struct in_addr    sin_addr; /* Internet address. */

      unsigned char    sin_zero[8];

    };

    其中成员sin_family表示地址类型,对于使用TCP/IP协议进行的网络编程,该值只能是AF_INET。

    sin_port是端口号,

    sin_addr用来存储32位的ip地址。

    数组sin_zero为填充字段,一般赋值为0

    结构体struct in_addr的定义如下:

    struct in_addr{

      unsigned long  s_addr;

    };

    结构体sockaddr 的长度为16个字节,结构体sockaddr_in的长度也为16个字节。通常在编写基于TCP/IP协议

    的网络程序时,使用结构体sockaddr_in来设置地址,然后通过强制类型转换成sockaddr 类型。

    以下是设置地址信息的示例代码:

    struct sockaddr_in sock;

    sock.sin_family = AF_INET ;

    sock.sin_port = htons(6000);

    sock.sin_addr.s_addr = inet_addr("200.200.3.18");

    memset(sock.sin_zero, 0, sizeof(sock.sin_zero));

    2、创建套接字

    socket函数用来创建一个套接字。

    int socket(int domain, int type, int protocol);

    参数domain用于指定创建套接字所使用的协议族,

    常用的协议族:

    AF_UNIX, AF_LOCAL 创建只在本机内进行通信的套接字
    AF_INET     使用 IPv4   TCP/IP 协议
    AF_INET6      使用 IPv6    TCP/IP 协议

    参数type指定套接字的类型,可取如下值:

    SOCK_STREAM 创建TCP流套接字

    SOCK_DGRAM 创建UDP数据报套接字

    SOCK_RAW 创建原始套接字

    参数protocol通常设置为0,表示通过参数domain指定的协议族和参数type指定的套接字类型来确定使用的协议。当创建原始

    套接字时,系统无法唯一地确定协议,此时就需要使用该参数指定所使用的协议。

    ---------------------------------------

    创建TCP套接字:

    int sock_fd;

    sock_fd = socket(AF_INET, SOCK_STREAM, 0);

    if  (sock_fd  <  0)

    {

      perror("socket error:");

      exit(1);

    }

    创建UDP套接字:

    int sock_fd;

    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

  • 相关阅读:
    Wijmo 更优美的jQuery UI部件集:从wijwizard和wijpager开始
    设计规范基础
    libgdx的tmx地图处理工具gdxtiledpreprocessor.jar(TiledMapPacker)修正版
    Zookeeper简介
    翻译:Contoso 大学 6 – 更新关联数据
    jquery 插件ztree的应用简单的树(tree)
    使用EF构建企业级应用
    可复用的WPF或者Silverlight应用程序和组件设计(1)——应用程序级别
    Castor简单介绍
    Eclipse各种书籍资料整理包括书籍介绍和下载
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/6774630.html
Copyright © 2011-2022 走看看