目录
前言
思路
初始化DLL
创建套接字
绑定套接字
连接服务器/监听客户端
接受/发送服务器/客户端发来的消息
关闭DLL
关闭套接字
服务器代码
#include <iostream>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{
/****************************初始化DLL****************************/
WSADATA wsadata;
/**
* @brief:初始化DLL
* @param[in]:指明winsock版本
* @param[out]:存放返回数据
**/
WSAStartup(MAKEWORD(2, 2), &wsadata);
/****************************初始化socket****************************/
/**
* @brief:创建套接字
* @param[in]:IP类型,PF_INET,ipv4
* @param[in]:套接字类型,SOCK_STREAM,流式套接字
* @param[in]:协议类型,IPPROTO_TCP,TCP协议
**/
SOCKET serversocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
/****************************分配socket空间****************************/
sockaddr_in socketaddr;
/**
* @brief:清空部分内存
* @param[in]:清空部分内存地址
* @param[in]:清空部分内存大小
**/
ZeroMemory(&socketaddr, sizeof(socketaddr));
socketaddr.sin_family = PF_INET;
socketaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
socketaddr.sin_port = htons(1234);
/****************************绑定套接字****************************/
bind(serversocket, (sockaddr *)&socketaddr, sizeof(socketaddr));
/****************************服务器监听客户端****************************/
/**
* @brief:监听套接字
* @param[in]:SOCKET实例
* @param[in]:SOCKET地址
* @param[in]:SOCKET大小
**/
listen(serversocket, 20);
/****************************配置客户端信息****************************/
SOCKADDR clientaddr;
int size = sizeof(clientaddr);
/**
* @brief:接收客户端请求
**/
SOCKET clientsocket = accept(serversocket, (sockaddr *)&clientaddr, &size);
/****************************发送消息****************************/
cout << "Connect success!Ready!" << endl;
const char *message = "hello world";
/**
* @brief:与客户端通信
* @param[in]:客户端套接字
* * @param[in]:发送的数据
* * @param[in]:数据大小
* * @param[in]:默认为0
**/
send(clientsocket, message, (int)strlen(message), 0);
/****************************关闭服务器****************************/
/**
* @brief:关闭套接字
* @param[in]:
* @note:
**/
closesocket(clientsocket);
closesocket(serversocket);
/**
* @brief:停止使用DLL
* @note:
**/
WSACleanup();
system("pause");
return 0;
}
客户端
#include <iostream>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{
//初始化DLL
WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);
//创建套接字
//绑定套接字
SOCKET clientsocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in socketaddr;
ZeroMemory(&socketaddr, sizeof(socketaddr));
socketaddr.sin_family = PF_INET;
socketaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
socketaddr.sin_port = htons(1234);
//连接服务器
connect(clientsocket, (sockaddr *)&socketaddr, sizeof(socketaddr));
// 接受服务器发来的消息
char recieve[512] = {0};
recv(clientsocket, recieve, 512, 0);
cout << "Message from Server:" << recieve << endl;
//关闭套接字
closesocket(clientsocket);
WSACleanup();
cin.get();
cin.get();
return 0;
}