(书接上回:网络_TCP_WIN10_VS2019_C++_服务器 (V1)_wenluderen的博客-CSDN博客)
×××××××××××××××××××
第一步:打开VS2019,创建C++的 控制台空程序
?
第二步: 添加CPP文件
?第三步:添加代码
头部 和尾部代码一样
#include <winsock2.h>//winsock 的头文件
#include <Ws2tcpip.h>//inet_pton的头文件
#include <iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")//除了在项目的属性中设定引用的东西,也可以使用代码来引用库
int main()
{
int com_return = 0;//定义一个int 类型变量, 用于接收一些函数的返回值,主要是为了让程序好看
//第一步: 初始化函数,指定版本号。
WSADATA wd;//获取socket的相关信息
com_return = WSAStartup(MAKEWORD(2, 2), &wd);//注意此处是逗号, 不是句号
//然后就是判断 成功
if (0 != com_return)
{
cout << "WSAStartup error:" << WSAGetLastError() << endl;
return 0;
}
else
{
cout << "WSAStartup succesful:" << endl;
cout << wd.wVersion << endl;
cout << wd.wHighVersion << endl;
cout << wd.iMaxSockets << endl;
}
//第二步:创建TCP socket
SOCKET gsz_client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (gsz_client == INVALID_SOCKET)
{
cout << "socket error:" << WSAGetLastError() << endl;
return 0;
}
else
{
cout << "socket succesful:" << endl;
}
//第三步:链接服务器
sockaddr_in addr_server;//
addr_server.sin_port = htons(60000);//要用到网络字节序, 所以使用htons. 将主机字节序转化网络字节序
inet_pton(AF_INET, "192.168.1.102", &addr_server.sin_addr.s_addr);//vs2013版本以上使用新的函数转换IP地址
addr_server.sin_family = AF_INET;//地址族
if (SOCKET_ERROR == connect(gsz_client, (sockaddr*)&addr_server, sizeof(sockaddr_in)))
{
cout << "connect error:" << WSAGetLastError() << endl;
return 0;
}
else
{
cout << "connect succesful:" << WSAGetLastError() << endl;
}
//第四步:收发数据
int ret = 0;
do
{
//收. 接受来自服务器的信息
char buf[64] = { '\0' };
ret = recv(gsz_client, buf, 64, 0);//64是buffer的长度, flag=0
char IPdotdec[20]; //存放点分十进制IP地址
inet_ntop(AF_INET, (void*)&addr_server.sin_addr, IPdotdec, 16);//inet_ntoa 转化为IP字符串
cout << "服务端的IP=" << IPdotdec << "____返回数据:______" << buf << endl;
//发数据
ret = send(gsz_client, "I am Client!", strlen("I am Client!"), 0);
Sleep(1000);
} while (ret != SOCKET_ERROR && ret != 0);
//第五步:关闭
closesocket(gsz_client);
//第六步:清理 和释放 winsock
WSACleanup();
}
|