套接字以及相关函数

socket函数

linux下的socket函数:

#include<sys/socket.h>
int   socket(int  domain,  int  type,  int  protocol);

参数:    
            domain     套接字中使用的协议族信息
            type          套接字数据传输类型信息
            protocol   计算机间通信中使用的协议信息

返回值:  

            成功:返回文件描述符
            失败:返回 -1 

windows下的socket函数:

#include<winsock2.h>
SOCKET    socket(int  af,  int  type,  int  protocol);

参数:    
            domain     套接字中使用的协议族信息
            type          套接字数据传输类型信息
            protocol   计算机间通信中使用的协议信息

返回值:
             成功:返回socket句柄
             失败:返回  INVALID_SOCKET
 

参数一 (domain): 

协议族(Protocol Family) 
             PF_INET           IPV4互联网协议族
             PF_INET6         IPV6互联网协议族
             PF_LOCAL       本地通信的UNIX协议族
             PF_PACKET     底层套接字的协议族
             PF_IPX            IPX  Novell协议族

参数二(type)

            SOCK_STREAM     面向连接套接字
            SOCK_DGRAM      面向消息套接字

参数三(protocol)

         IPPROTO_TCP
         IPPROTO_UDP

地址信息表示(sockaddr_in结构体)

struct   sockaddr_in
{
      sa_family_t        sin_family;     //地址族
      uint16_t            sin_port;        //16位TCP/UDP端口号
      struct  in_addr  sin_addr;       //32位IP地址
      char   sin_zero[8];   //不使用
}

struct   in_addr
{
     in_addr_t    s_addr;   //32位IPV4地址
}

此sockaddr_in结构体用于bind函数中,
bind(SOCKET   s,   const   struct   sockaddr*  name,   int   namelen);
成功返回 0  失败返回  SOCKET_ERROR

举例:
 //1,创建监听套接字
    hServSock = socket(PF_INET, SOCK_STREAM, 0);
    if (hServSock == INVALID_SOCKET)
    {
        cout << "申请发送套接字失败" << endl;
    }

    //2 ,绑定本地IP接口
    SOCKADDR_IN  servAdr;
    memset(&servAdr, 0, sizeof(servAdr));
    servAdr.sin_family = AF_INET;      //地址族
    servAdr.sin_port = htons(9999);    //端口,主机转网络字节序
    servAdr.sin_addr.s_addr = htonl(INADDR_ANY);  //绑定本地IP

    if (bind(hServSock, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
    {
        cout << "bind error" << endl;
    }

字节序转换

unsigned  short  htons(unsigned  short)
unsigned  short  ntohs(unsigned  short)
unsigned  long   htonl(unsigned   long)
unsigned  long   ntohl(unsigned   long)

h代表主机字节序
n代表网络字节序
s代表short
l代表long

将字符串转换成点分十进制32位整数型数据
wchar_t  adr[] = L"192.168.19.1";
InetPton(AF_INET, adr, &servAdr.sin_addr); // 服务器IP地址  

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值