udp 练习

可以实现双方持续通信了

udp服务器端

#include
#include
#include
#include
#pragma comment (lib,"WS2_32.lib")

using namespace std;

int main()
{
    WSADATA wsaData;
    SOCKET RecvSocket;
    sockaddr_in recvaddr;
    int port = 5150;
    char recvcharbuf[128];
    int recvcharbuflen = 128;
    char sendcharbuf[128];
    int sendcharbuflen = 128;
    SOCKADDR_IN senderaddr;
    int senderaddrsize = sizeof(senderaddr);

    if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
    {
        cout << "wsastarup error" << endl;
    }
    cout << "wsastarup successful" << endl;
    if ((RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET)//看准括号的个数
    {
        cout << "socket failed" << endl;
        return 0;
    }
    cout << "recvsock socker successful" << endl;
    recvaddr.sin_family = AF_INET;
    recvaddr.sin_port = htons(port);
    recvaddr.sin_addr.S_un.S_addr =INADDR_ANY;

    if (bind(RecvSocket, (LPSOCKADDR)&recvaddr, sizeof(recvaddr)) == SOCKET_ERROR)
    {
        cout << "bind error" << endl;
        return 0;
    }

    /*if (::bind(RecvSocket, (LPSOCKADDR)&recvaddr, sizeof(recvaddr)) == SOCKET_ERROR)
    {
        printf("Failed bind() \n");
        return 0;
    }
    */
    cout << "bind successful" << endl;
    while (true)
    {
        if ((recvfrom(RecvSocket, recvcharbuf, recvcharbuflen, 0, (SOCKADDR*)&senderaddr, &senderaddrsize)) == SOCKET_ERROR)//recefrom主要最后一个参数,是引用
        {
            cout << "revcfrom error" << endl;
        }
        cout << "recv successful:\n" << recvcharbuf << endl;
        cout << "输入数据" << endl;
        cin >> sendcharbuf;
        if ((sendto(RecvSocket, sendcharbuf, sendcharbuflen, 0, (SOCKADDR*)&senderaddr, sizeof(senderaddr))) == SOCKET_ERROR)
        {
            cout << "send error" << endl;
            return 0;
        }
        cout << "send successful" << endl;
    }
    closesocket(RecvSocket);
    WSACleanup();
    return 0;
}


udp客户端

#include
#include
#include
#include
#pragma comment (lib,"WS2_32.lib")

using namespace std;

int main()
{
    WSADATA wsaData;
    SOCKADDR_IN senderaddr;
    int senderaddrsize = sizeof(senderaddr);
    if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
    {
        cout << "wsastarup field" << endl;
        return 0;
    }
    cout << "wsastarup successful" << endl;
    SOCKET sendsock;
    sendsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sendsock == INVALID_SOCKET)
    {
        cout << "sendsock sock failed" << endl;
        return 0;
    }
    SOCKADDR_IN recvrAddr;
    recvrAddr.sin_family = AF_INET;
    recvrAddr.sin_port = htons(5150);
    recvrAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    char sendbuf[128];
    int sendbuflen = 128;
    char recvbuf[128];
    int recvbuflen = 128;
    while (true)
    {
        cout << "输入数据" << endl;
        cin >> sendbuf;
        sendto(sendsock, sendbuf, sendbuflen, 0, (SOCKADDR*)&recvrAddr, sizeof(recvrAddr));
        
        cout << "接收数据" << endl;
        if ((recvfrom(sendsock, recvbuf, recvbuflen, 0, (SOCKADDR*)&senderaddr, &senderaddrsize)) == SOCKET_ERROR)//recefrom主要最后一个参数,是引用
        {
            cout << "revcfrom error" << endl;
        }
        cout << "recv successful:\n" << recvbuf << endl;
    }
    closesocket(sendsock);
    WSACleanup();
    return 0;
}

你可能感兴趣的:(C++网络编程)