Windows系统下的socket编程

Windows系统下的socket编程

1、winsock2.h,windows系统下使用socket只需要一个头文件

2、编译时需要添加ws2_32.lib库,设置->搜索code-runner.executorMap,打开setting.json文件,把C的编译参数修改为:

"code-runner.executorMap": {
	"c": "cd $dir && gcc $fileName -std=gnu99 -lws2_32 -lpthread -o  $fileNameWithoutExt && $dir$fileNameWithoutExt",
	"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
}    

3、初始化网络库:

int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData);
功能:初始化网络库
wVersionRequested:指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本。
    MAKEWORD(主版本号、副版本号),一般使用2,2即可。
lpWSAData:返回请求的版本信息
返回值:成功返回0,失败返回错误信息

4、使用标准socket收发数据接口

ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:接收数据
sockfd:socket对象描述符
buf:缓冲区首地址
len:缓冲区大小
flags:是否阻塞,一般写0即可
    
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:发送数据
socket:socket对象描述符
buf:缓冲区首地址
len:缓冲区大小
flags:是否阻塞,一般写0即可
    
int closesocket(int socket);
功能:关闭socket对象

如何优雅地使用socket

​ 由于大小端的原因,在使用socket通信时,不能直接发送变量,而是要发送字符串,因此要先把要发送的数据转换成字符串在再发送。

int sprintf(char *str, const char *format, ...);
功能:把各种类型的变量输出到字符长中
    
int sscanf(const char *str, const char *format, ...);
功能:从字符串中读取各种类型的数据到变量中

把socket对象转换成FILE对象,使用fprintf/fscanf进行读写数据

FILE *fdopen(int fd, const char *mode);
功能:把socket描述符转换成FILE对象

按流关闭socket

int shutdown(int sockfd, int how);
功能:关闭socket的读写流
sockfd:要关闭的socket对象
how:
    SHUT_RD		关闭读功能
    SHUT_WR		关闭写功能
    SHUT_RDWR	关读写功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值