socket 编程中的绑定,监听

socket 表示我们调用操作系统的底层传输,就像一把

sockaddr_in 是一个结构体,一个钥匙,放我们允许连接的地址,准备用的端口,用什么协议。

绑定 就是把钥匙插进匹配的锁(对socket文件做了一个标识)

监听 就是拧这个钥匙开锁 就开始工作啦,开始监听

#include <arpa/inet.h>
#include <iostream>
// 宏会在编译之前就执行,比如Linux时就不会有以下的代码
#ifdef WIN32 // 当存在WIN32的宏时,会执行中间的
#include <windows.h>

#else
#include <sys/types.h>          /* linux 引用这两个*/
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <stdlib.h>
#endif

using namespace std;
int main(int argc,char* argv[])
{

    unsigned short port=8080;
    if (argc>1)
    {
        port=atoi(argv[1]);//atoi 字符串转化为数字
    }

#ifdef WIN32 // 在linux中不需要以下的初始化
    // windows 调用socket 库 ,需要1. 初始化动态库  2. 引用lib库
    WSADATA ws;
    WSAStartup(MAKEWORD(2, 2), &ws);//也加载动态库,引用加1
#endif
    int sock=socket(AF_INET,SOCK_STREAM,0);//确定用什么协议,用tcp ip 小于0代表失败
    if(sock<0)
    {
        cout<<"连接失败"<<endl;
        return -1;
    }


     
    sockaddr_in saddr; //存取ip地址,port
    saddr.sin_family=AF_INET; //tcp/ip协议
    saddr.sin_port=htons(port); // 统一转化为大端存储(网络默认)
    saddr.sin_addr.s_addr=htonl(0);//一个机器可能有多个ip,这里默认任意ip都可以接受
    
    // socket 和 端口ip等信息绑定
    if(bind(sock,(sockaddr*)&saddr,sizeof(saddr))!=0)
    {
        cout<<"绑定失败"<<endl;
        return -2;
    }
	
    // 每次连接进来,会存一个信息,这个存连接 的列表大小多少
    listen(sock,10);//第二个参数是大小,套接字队列的长度
    // 每次accept 会减少一个
    
    
    cout<<"绑定成功"<<endl;

#ifdef WIN32
    closesocket(sock);
#else
    close(sock);
#endif
    cout << sock << endl;
    

    std::cout << "Hello World!\n";
    std::cout << "Hello World!\n";
    return 0;

}

htons()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4vOEoqKi-1668160922736)(C:/Users/hch/AppData/Roaming/Typora/typora-user-images/image-20221111162631446.png)]

x86 是 小尾顺序(字节序噢)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值