windows网络编程(三)——UDP

来源:互联网 发布:37轩辕剑神臂进阶数据 编辑:程序博客网 时间:2024/06/05 16:55

UDP 无listen(),accept()

使用sentto(),recvfrom(),

无连接,但可通过connect()提高传输效率。


服务器端

#include <stdio.h>#include <winsock2.h>#pragma comment (lib, "ws2_32.lib")  //加载 ws2_32.dll#define BUF_SIZE 100int main(){    WSADATA wsaData;    WSAStartup( MAKEWORD(2, 2), &wsaData);    //创建套接字    SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);    //绑定套接字    sockaddr_in servAddr;    memset(&servAddr, 0, sizeof(servAddr));  //每个字节都用0填充    servAddr.sin_family = PF_INET;  //使用IPv4地址    servAddr.sin_addr.s_addr = htonl(INADDR_ANY); //自动获取IP地址    servAddr.sin_port = htons(1234);  //端口    bind(sock, (SOCKADDR*)&servAddr, sizeof(SOCKADDR));    //接收客户端请求    SOCKADDR clntAddr;  //客户端地址信息    int nSize = sizeof(SOCKADDR);    char buffer[BUF_SIZE];  //缓冲区    while(1){        int strLen = recvfrom(sock, buffer, BUF_SIZE, 0, &clntAddr, &nSize);        sendto(sock, buffer, strLen, 0, &clntAddr, nSize);    }    closesocket(sock);    WSACleanup();    return 0;}



客户端

#include <stdio.h>#include <WinSock2.h>#pragma comment(lib, "ws2_32.lib")  //加载 ws2_32.dll#define BUF_SIZE 100int main(){    //初始化DLL    WSADATA wsaData;    WSAStartup(MAKEWORD(2, 2), &wsaData);    //创建套接字    SOCKET sock = socket(PF_INET, SOCK_DGRAM, 0);    //服务器地址信息    sockaddr_in servAddr;    memset(&servAddr, 0, sizeof(servAddr));  //每个字节都用0填充    servAddr.sin_family = PF_INET;    servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");    servAddr.sin_port = htons(1234);    //不断获取用户输入并发送给服务器,然后接受服务器数据    sockaddr fromAddr;    int addrLen = sizeof(fromAddr);    while(1){        char buffer[BUF_SIZE] = {0};        printf("Input a string: ");        gets(buffer);        sendto(sock, buffer, strlen(buffer), 0, (struct sockaddr*)&servAddr, sizeof(servAddr));        int strLen = recvfrom(sock, buffer, BUF_SIZE, 0, &fromAddr, &addrLen);        buffer[strLen] = 0;        printf("Message form server: %s\n", buffer);    }    closesocket(sock);    WSACleanup();    return 0;}



阅读全文
0 0
原创粉丝点击