悉野小楼

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

MFC学习 socket

下面未处理异常

tcpserver.cpp

复制代码
#include "WinSock2.h"
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 1666
int main()
{
    WORD wVersion = MAKEWORD(2, 2);
    int err;
    WSADATA wsaData;
    err = WSAStartup(wVersion, &wsaData);
    SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, NULL);
    sockaddr_in addSrv;
    addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //或用inet_addr("192.168.1.1");
    addSrv.sin_family = AF_INET;
    addSrv.sin_port = htons(PORT);
    bind(sockSrv, (sockaddr FAR *)&addSrv, sizeof(addSrv));
    int iResult = listen(sockSrv, SOMAXCONN);//等待连结数, 最大连接请求数 SOMAXCONN
    printf("server ip:%s\n", inet_ntoa(addSrv.sin_addr));
    printf("server port:%d\n", ntohs(addSrv.sin_port));
    printf("start listening...\n");

    while(TRUE)
    {
        sockaddr_in addClient;
        int iLen = sizeof(addClient);
        SOCKET sockConn = accept(sockSrv, (sockaddr FAR *)&addClient, &iLen);
        printf("client ip:%s\n", inet_ntoa(addClient.sin_addr));
        printf("client port:%d\n", ntohs(addClient.sin_port));
        char sendBuf[100];
        sprintf(sendBuf, "Welcome %s to server", inet_ntoa(addClient.sin_addr));
        send(sockConn, sendBuf, strlen(sendBuf) + 1, 0); //多写一个字节, 可以多个\0
        char recvBuf[100];
        recv(sockConn, recvBuf, 100, 0); //tcp用recv, udp用recvfrom
        printf("%s\n", recvBuf);
        closesocket(sockConn);
    }
    closesocket(sockSrv);
    WSACleanup();
    return 0;
}
复制代码

tcpclient.cpp

复制代码
#include "WinSock2.h"
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 1666
int main()
{
    WORD wVersion = MAKEWORD(2, 2);
    int err;
    WSADATA wsaData;
    err = WSAStartup(wVersion, &wsaData);
    SOCKET sockClient = socket(AF_INET, SOCK_STREAM, NULL);
    sockaddr_in addSrv;
    addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //服务器地址
    addSrv.sin_family = AF_INET;
    addSrv.sin_port = htons(PORT);
    connect(sockClient, (sockaddr FAR *)&addSrv, sizeof(addSrv));
    char recvBuf[100];
    recv(sockClient, recvBuf, 100, 0);
    printf("%s\n", recvBuf);
    send(sockClient, "hello123", strlen("hello123") + 1, 0);
    closesocket(sockClient);
    WSACleanup();
    system("pause");
    return 0;
}
复制代码

udpserver.cpp

复制代码
#include "WinSock2.h"
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 1666
int main()
{
    WORD wVersion = MAKEWORD(2, 2);
    int err;
    WSADATA wsaData;
    err = WSAStartup(wVersion, &wsaData);
    SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, NULL);
    sockaddr_in addSrv;
    addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //或用inet_addr("192.168.1.1");
    addSrv.sin_family = AF_INET;
    addSrv.sin_port = htons(PORT);
    bind(sockSrv, (sockaddr FAR *)&addSrv, sizeof(addSrv));

    printf("server ip:%s\n", inet_ntoa(addSrv.sin_addr));
    printf("server port:%d\n", ntohs(addSrv.sin_port));


    while(TRUE)
    {
        sockaddr_in addClient;
        int iLen = sizeof(addClient);
        char recvBuf[100];
        recvfrom(sockSrv, recvBuf, 100, 0, (sockaddr*)&addClient, &iLen);
        printf("client ip:%s\n", inet_ntoa(addClient.sin_addr));
        printf("client port:%d\n", ntohs(addClient.sin_port));
        printf("%s", recvBuf);
    }
    closesocket(sockSrv);
    WSACleanup();
    return 0;
}
复制代码

udpclient.cpp

复制代码
#include "WinSock2.h"
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 1666
int main()
{
    WORD wVersion = MAKEWORD(2, 2);
    int err;
    WSADATA wsaData;
    err = WSAStartup(wVersion, &wsaData);
    SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, NULL);
    sockaddr_in addSrv;
    addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //或用inet_addr("192.168.1.1");
    addSrv.sin_family = AF_INET;
    addSrv.sin_port = htons(PORT);
    sendto(sockClient, "hello", strlen("hello") + 1, 0, (SOCKADDR*)&addSrv, sizeof(addSrv));
    closesocket(sockClient);
    WSACleanup();
    system("pause");
    return 0;
}
复制代码

 代码下载

posted on   悉野  阅读(511)  评论(2编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示