zoukankan      html  css  js  c++  java
  • 基于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();

    }

  • 相关阅读:
    AIX下的ha高可用集群cluster
    触发redo写的几个条件
    Oracle Internals Notes Redo Write Triggers
    触发写Redo&nbsp;Log的条件
    [Oracle]理解undo表空间
    MySQL数据备份之mysqldump使用
    Orabbix无法获取Oracle DB Size和DB Files Size的解决方法
    ES5和ES6那些你必须知道的事儿(三)
    ES5和ES6那些你必须知道的事儿(二)
    ES5和ES6那些你必须知道的事儿(一)
  • 原文地址:https://www.cnblogs.com/rosesmall/p/2954278.html
Copyright © 2011-2022 走看看