udp通信

Server端:

#include "stdafx.h"
#include "NetWork.h"
#include "winsock2.h"

// innitialize socket
bool InitializeSocket()
{
    bool bRet = false;
    do
    {
        WSAData wsadata;
        if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))
            break;
        if (2 != LOBYTE(wsadata.wVersion) || 2 != HIBYTE(wsadata.wVersion))
            break;

        bRet = true;
    } while (false);
    return bRet;
}
sockaddr_in clientAddr;
// BindSocketToPort
int BindSocketToPort()
{
    int nRet = -1;
    do
    {        
        SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
        sockaddr_in addr;
        addr.sin_family = AF_INET;
        addr.sin_port = htons(8080);
        addr.sin_addr.S_un.S_addr = inet_addr("192.168.1.3"); // 0 any ip
        nRet = bind(sock, (SOCKADDR*)&addr, sizeof(SOCKADDR));
        if (nRet == SOCKET_ERROR)
            break;
        int len = sizeof(SOCKADDR);
        
        char buf[1024] = { 0 };
        int res = recvfrom(sock, buf, sizeof(buf), 0, (SOCKADDR*)&clientAddr, &len);
        printf("blocked:%s,%d\n", buf, sock);
        
        
        nRet = sock;
        CreateThread(0,0, RecvProc,  (void*)(&sock),0, 0);

        while (true)
        {
            char buf[1024] = { 0 };
            gets_s(buf, 1024);
            sendto(sock, buf, 1024, 0,(SOCKADDR*)&clientAddr,sizeof(SOCKADDR) );
        }
    } while (false);

    
    return nRet;
}

unsigned long __stdcall RecvProc(void* lpParameter)
{
    while (true)
    {
        char buf[1024] = { 0 };
        int res = recvfrom(*(int*)lpParameter, buf, sizeof(buf), 0, 0, 0);
        printf("recevied from client:%s,%d\n", buf, *(int*)lpParameter);
    }
    return 0;
}

 

客户端:

#include "stdafx.h"
#include "NetWork.h"
#include "winsock2.h"
#include "stdio.h"

// innitialize socket
bool InitializeSocket()
{
    bool bRet = false;
    do
    {
        WSAData wsadata;
        if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))
            break;
        if (2 != LOBYTE(wsadata.wVersion) || 2 != HIBYTE(wsadata.wVersion))
            break;

        bRet = true;
    } while (false);
    return bRet;
}

// Create Socket
int CreateSocket()
{
    int nRet = -1;
    do
    {        
        SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
        sockaddr_in addr;
        addr.sin_family = AF_INET;
        addr.sin_port = htons(8080);
        addr.sin_addr.S_un.S_addr = inet_addr("192.168.1.3"); // 0 any ip
    
        sendto(sock, "hello", strlen("hello"), 0, (SOCKADDR*)&addr, sizeof(SOCKADDR));
        CreateThread(0, 0,RecvFrom, (void*)&sock, 0, 0);
        while (true)
        {
            char buf[1024] = { 0 };
            gets_s(buf);
            // Send
            sendto(sock, buf, strlen(buf), 0, (SOCKADDR*)&addr, sizeof(SOCKADDR));

        }
        nRet = sock;
    } while (false);
    return nRet;
}

unsigned long __stdcall  RecvFrom(void* lpParameter)
{
    int sock = *(int*)lpParameter;
    while (true)
    {
        char buf[1024] = { 0 };
        recvfrom(sock, buf, 1024, 0, 0, 0);
        printf("received from server:%s\n", buf);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值