c++ socket

服务端 客户端
创建socket 创建Socket
开启监听
等待连接 发起连接
收发消息 收发数据

初始化socket

初始化环境

linux 不需要

#ifdef WIN32
#define _sock_init( )   { WSADATA wsaData; WSAStartup( MAKEWORD(2, 2), &wsaData ); }

创建socket

// 1 建立一个 socket 套接字   AF_INET 代表 IPv4    SOCK_STREAM 数据流   协议
SOCKET _sock =socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

windows 环境下 需要 初始化 WSADATA 函数
调用 WSAStartup() 函数,参数 MAKEWORD(2, 2) 指定使用 Winsock 2.2 版本,&wsaData 为输出参数,用于接收初始化结果

socket 函数讲解

#if INCL_WINSOCK_API_PROTOTYPES
WINSOCK_API_LINKAGE
_Must_inspect_result_
SOCKET
WSAAPI
socket(
    _In_ int af,
    _In_ int type,
    _In_ int protocol
    );
#endif 

它有三个参数:
af(Address Family):指定地址族,常见的值有 AF_INET(IPv4)或 AF_INET6(IPv6)。
type:指定 socket 类型,常见值包括 SOCK_STREAM(流式套接字,适用于 TCP)和 SOCK_DGRAM(数据报套接字,适用于 UDP)。
protocol:指定使用的协议,通常为 0 以使用默认协议。对于 AF_INET 和 SOCK_STREAM,协议为 IPPROTO_TCP;对于 AF_INET 和 SOCK_DGRAM,协议为 IPPROTO_UDP。

返回类型 是SOCKET 但是 windows 和liux 的类型 不一样
windows 默认有 INVALID_SOCKET #define INVALID_SOCKET (SOCKET)(~0)
linux 没有 ,返回的是-1 ,可以自定义一个 INVALID_SOCKET 宏 与windows 失败的意义一样即可

绑定

sockaddr_in addr;
memset(&addr, 0, sizeof(sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_port = htons(2233);
::inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr.s_addr);

sockaddr_in 这个结构体

c++

qtCreator快捷键

2024-10-17 10:11:15

c++

c++ 库 标准库 系统库 三方库

2024-10-27 17:25:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索