【C++】Windows socket编程 TCP通信

SERVER端
代码:

#include <Winsock2.h>
#include <iostream>

using namespace std;

void main()
{
	/*
	1.加载套接字库函数WSAstartup ,
	加载套接字库,进行套接字库的版本协商。
	有两个参数,第一个是WORD,用来指定版本号。
	第二个参数是返回值,指向WSAData结构体的指针,接收windows sockets实现的详细的细节
	*/
	WORD wVersionRequested;//定义WORD类型变量
	WSADATA wsaData;//WORD类型,用于指定准备加载的winsock库的版本,可用MAKEWORD(x,y)方便的获得wVersionRequested的正确值。x高字节副版本,y低字节主版本
	int err;

	/*
	补充:
	WSADATA结构体定义如下:`在这里插入代码片`
	typedef struct WSAData{
	WORD wVersion;//低字节主版本
	WORD wHighVersion;//高字节副版本
	char szDescription [WSADECRIPTION_LEN+1];//没用
	char szSystemStatus[WSASYS_STATUS_LEN+1];//没用
	unsigned short iMaxSockets;//不可使用
	unsigned short iMaxLdpDg;//不可使用
	char FAR*lpVendorInfo;//没有用到
	}WSADATA,*LPWSADATA;
	对于每一个WSAStartup的成功调用(成功加载winsock.DLL后),在最后都对应一个WSACleanup调用,以便释放为该应用程序分配的资源。
	*/

	wVersionRequested=MAKEWORD(1,1);//MAKEWORD宏,请求1.1版本的winsock库
	err=WSAStartup(wVersionRequested,&wsaData);//&wsaData指向WSADATA的指针,WSAStartup用其加载的库版本的相关信息填写在这个结构中。(后来程序出错,1.1版本不行了,换成2.2可以)

	if(err!=0){
		return;
	}

	//判断返回的wVerion值低字节是否为1和高字节是否为1,如果不是请求的winsock 1.1版本,程序调用WSACleanup(),终止对winsock库的使用,然后返回。
	if(LOBYTE(wsaData.wVersion)!=1||
		HIBYTE(wsaData.wHighVersion)!=1){
			WSACleanup();
			return;
	}


	/*2.创建套接字
	SOCKET socket(int af,int type,int protocol);
	socket类型返回套接字的描述符,这个类型实际上指定的是一个整型。
	该函数接收三个参数。
	af:指定地址族,对于TCP/IP协议的套接字,它只能是AF_INET(也可以写成PF_INET).
	type:socket类型,对于1.1版本的socket,只支持两种类型的套接字:SOCK_STREAM 指定产生流式套接字
	                                                             SOCK_RGRAM产生数据报套接字
	protocol:与特定的地址家族相关的协议,如果指定为0,那么它就会根据地址格式和套接字类别,自动为你选一个合适的协议。
	返回值:函数调用成功,返回一个新的SOCKET数据类型的套接字描述符。
	                失败,返回一个INVALID_SOCKET,错误信息可以通过WSAGetLastError函数返回
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值