网络编程(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位置:

**https://github.com/HymanLiuTS/NetDevelopment
**

克隆本项目:

gitclone git@github.com:HymanLiuTS/NetDevelopment.git

获取本文源代码:

git checkout NL04

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值