• 基于UDP的简单的聊天程序


    //UDP  服务器

    #include <Winsock2.h>
    #include <stdio.h>

    void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD(1,1);
    err = WSAStartup(wVersionRequested,&wsaData);

    if(err != 0)
    {
    return;
    }

    if(LOBYTE(wsaData.wVersion ) != 1 ||
    HIBYTE(wsaData.wVersion ) != 1 )
    {
    WSACleanup();
    return;
    }

    //创建套接字
    SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr .S_un .S_addr = htonl(INADDR_ANY);
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(6000);

    //绑定套接字
    bind(sockSrv,(SOCKADDR*) &addrSrv,sizeof(SOCKADDR));

    //等待并接受数据

    /*SOCKADDR_IN addrClient;
    int len = sizeof(SOCKADDR);
    char recvBuf[100];
    recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR *) &addrClient,&len);
    printf("%s\n",recvBuf);*/

    //基于UDP的简单聊天程序
    char recvBuf[100];
    char sendBuf[100];
    char tempBuf[100];

    SOCKADDR_IN addrClient;
    int len = sizeof(SOCKADDR);

    while(1)
    {
    //等待数据并接收数据
    recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
    if('q' == recvBuf[0])
    {
    sendto(sockSrv,"word Q",strlen("word Q")+1,0,(SOCKADDR *) &addrClient,len);
    printf("chat end \n");
    break;
    }
    sprintf(tempBuf,"%s say : %s",inet_ntoa(addrClient.sin_addr),recvBuf);

    printf("%s\n",tempBuf);

    //发送数据
    printf("Please input data :\n");
    gets(sendBuf);
    sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);

    }

    closesocket(sockSrv);
    WSACleanup();

    }

    //UDP 客户端

    #include <Winsock2.h>
    #include <stdio.h>

    void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD(1,1);
    err = WSAStartup(wVersionRequested,&wsaData);

    if(err != 0)
    {
    return;
    }

    if(LOBYTE(wsaData.wVersion ) != 1 ||
    HIBYTE(wsaData.wVersion ) != 1 )
    {
    WSACleanup();
    return;
    }

    //创建套接字
    SOCKET sockClient= socket(AF_INET,SOCK_DGRAM,0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr .S_un .S_addr = inet_addr("127.0.0.1");
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(6000);


    //发送数据
    //sendto(sockClient,"Hello my love",strlen("Hello my love")+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

    //基于UDP的简单聊天程序 client
    char recvBuf[100];
    char sendBuf[100];
    char tempBuf[100];

    //SOCKADDR_IN addrClient;
    int len = sizeof(SOCKADDR);

    while(1)
    {
    //发送数据
    printf("Please input data :\n");
    gets(sendBuf);
    sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);

    //等待数据并接收数据
    recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len);
    if('q' == recvBuf[0])
    {
    sendto(sockClient,"word Q",strlen("word Q")+1,0,(SOCKADDR *) &addrSrv,len);
    printf("chat end \n");
    break;
    }
    sprintf(tempBuf,"%s say : %s",inet_ntoa(addrSrv.sin_addr),recvBuf);

    printf("%s\n",tempBuf);

    }


    closesocket(sockClient);
    WSACleanup();

    }

  • 相关阅读:
    P2426 删数
    P2115 [USACO14MAR]破坏Sabotage
    P2679 子串
    P2979 [USACO10JAN]奶酪塔Cheese Towers
    P1114 “非常男女”计划
    P2105 K皇后
    P4053 [JSOI2007]建筑抢修
    P1294 高手去散步
    P4316 绿豆蛙的归宿
    P2253 好一个一中腰鼓!
  • 原文地址:https://www.cnblogs.com/rosesmall/p/2954278.html
Copyright © 2020-2023  润新知