簡單的UDP編程


//Server

#include "stdafx.h"
#include<WinSock2.h>
#include<windows.h>
#include<iostream>
using namespace std;

#pragma comment (lib,"ws2_32.lib")
#define PORT 6000
//UDP Server
int main()
{
    //初始化網絡環境
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa)!=0)
    {
        cout << "初始化網絡環境失敗" << endl;
        return -1;
    }
    //創建UDP的socket
    SOCKET sServer = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sServer==INVALID_SOCKET)
    {
        cout << "創建套接字失敗" << endl;
        return -1;
    }
    SOCKADDR_IN si;
    si.sin_family = AF_INET;
    si.sin_port = htons(PORT);
    si.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    //開始綁定
    bind(sServer, (sockaddr *)&si, sizeof(sockaddr));
    printf("Now,Server is running on port 6000,waiting for you\n");
    char szbuf[2048];
    memset(szbuf, 0, sizeof(szbuf));
    while (TRUE)
    {
        SOCKADDR_IN siClient;
        memset(&siClient, 0, sizeof(sockaddr));
        int siClientLen = sizeof(sockaddr);
        int ret = recvfrom(sServer, szbuf, sizeof(szbuf), 0,(sockaddr *) &siClient, &siClientLen);
        printf("Recv msg:%s from IP[%s],port[%d]\n", szbuf, inet_ntoa(siClient.sin_addr),
            ntohs(siClient.sin_port));
        sendto(sServer,"hello,你好",sizeof("hello,你好"),0, (sockaddr *)&siClient, siClientLen);
        printf("send back to IP[%s],port[%d]\n",  inet_ntoa(siClient.sin_addr),
            ntohs(siClient.sin_port));
    }
    return 0;
}


//Client
#include "stdafx.h"
#include<WinSock2.h>
#include<windows.h>
#include<iostream>
using namespace std;

#pragma comment (lib,"ws2_32.lib")
#define PORT 6000
//UDP Server
int main()
{
    //初始化網絡環境
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        cout << "初始化網絡環境失敗" << endl;
        return -1;
    }
    //創建UDP的socket
    SOCKET sClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sClient == INVALID_SOCKET)
    {
        cout << "創建套接字失敗" << endl;
        return -1;
    }
    SOCKADDR_IN si;
    si.sin_family = AF_INET;
    si.sin_port = htons(PORT);
    si.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    //開始綁定
    //bind(sClient, (sockaddr *)&si, sizeof(sockaddr));
    char szbuff[] = {"hello i am Client"};
    int dwSend = sendto(sClient, szbuff, sizeof(szbuff), 0, (sockaddr *)&si, sizeof(sockaddr));
    if (dwSend==0)
    {
        cout << "發送失敗" << endl;
        return -1;
    }
    cout << "Client Send msg :" << szbuff << endl;
    char szRecvBuff[2048];
    memset(szRecvBuff,0, sizeof(szRecvBuff));
    SOCKADDR_IN addrServer = { 0 };
    int addrServerLen = sizeof(sockaddr);
    recvfrom(sClient, szRecvBuff, sizeof(sockaddr), 0, (sockaddr *)&addrServer, &addrServerLen);
    cout << "Client Recv msg from Serve:" << szRecvBuff << endl;
    closesocket(sClient);
    WSACleanup();
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM