C语言网络编程winsock
前言
思路
初始化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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署