• 基于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();

    }

  • 相关阅读:
    method-r
    dtrace
    轻用其芒,动即有伤,是为凶器;深藏若拙,临机取决,是为利器!
    Git---报错:git Please move or remove them before you can merge 解决方案
    Git----拉取远程分支,git pull,git rebase,git pull --rebase的区别
    Git----查看提交日志
    Git---tag
    Git----常见工作管理总结
    【线上监控】日志上报bug处理方式总结
    接口文档所需内容
  • 原文地址:https://www.cnblogs.com/rosesmall/p/2954278.html
Copyright © 2020-2023  润新知