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;
}
效果图



 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号