600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 网络编程(4)—— 基于Windows系统的socket客户端的编程步骤

网络编程(4)—— 基于Windows系统的socket客户端的编程步骤

时间:2018-11-17 00:27:44

相关推荐

网络编程(4)—— 基于Windows系统的socket客户端的编程步骤

socket客户端编程的基本步骤:

1.1 导入ws2_32.lib静态链接库

在项目属性->配置属性->链接器->输入->附加依赖项中添加ws2_32.lib。

1.2 初始化Winsock相关库

int WSAStartup(WORD vVersionRequested,LPWSADATA lpWSAData)

vVersionRequested–Winsock的版本,通常用传入MAKEWORD,如MAKEWORD(2,2)表示主版本号2,副版本号2

lpWSAData–WSADATA结构体变量的地址,调用该函数后用来填充柄库的初始化信息

返回值–成功返回0,失败返回其他错误值

1.3 创建socket

SOCKET socket(int af,int type,int protocol);

af–通信协议族,常用的AF_INET,AF_INET6等

type–通信类型,SOCK_STREAM面向连接的可靠的传输方式;SOCK_DGRAM面向消息的非可靠的传输方式。

protocol–协议类型,通常为0

返回值–成功返回创建的SOCKET句柄,失败返回INVALID_SOCKET

1.4 连接服务器端

int connect(SOCKET s,const struct sockaddr* name,int namelen);

s–服务器端的SOCKET句柄

name–保存服务器端通信信息的结构体变量

namelen–上述结构体变量的长度

返回值–成功返回0,失败返回SOCKET_ERROR

1.5 接收数据

int recv(SOCKET s,char* buf,int len,int flags);

s–服务器端SOCKET句柄

buf–接收数据的buffer

len–上述buffer的长度

flags–用于接收数据的其他选项

返回值–成功返回0,失败返回SOCKET_ERROR

1.6 关闭SOCKET

int closesocket(SOCKET s);

s-SOCKET句柄

返回值–成功返回0,失败返回socket_ERROR

1.7 注销Winsock相关库

int WSACleanup();

返回值–成功返回0,失败返回SOCKET_ERROR

示例代码:#include<stdio.h>#include<stdlib.h>#include<winsock2.h>void error_handling(char* message){fputs(message,stderr);fputc('',stderr);exit(1);}int main(int argc,char* argv[]){WSADATA wsaData;SOCKET hSocket;SOCKADDR_IN servAddr; char message[30];int strlen;if(argc!=3){printf("Usage : %s <ip> <port>",argv[0]);exit(1);}if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)error_handling("WSAStartup error");hSocket=socket(PF_INET,SOCK_STREAM,0);if(hSocket==INVALID_SOCKET)error_handling("socket error");memset(&servAddr,0,sizeof(servAddr));servAddr.sin_family=AF_INET;servAddr.sin_addr.s_addr=inet_addr(argv[1]);servAddr.sin_port=htons(atoi(argv[2]));if(connect(hSocket,(SOCKADDR*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)error_handling("connect error");strlen=recv(hSocket,message,sizeof(message)-1,0);if(strlen==-1)error_handling("recv error");printf("Message from server: %s",message);closesocket(hSocket);WSACleanup();return 0;}

Github位置:

**/HymanLiuTS/NetDevelopment

**

克隆本项目:

gitclone git@:HymanLiuTS/NetDevelopment.git

获取本文源代码:

git checkout NL04

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。