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();

    }

  • 相关阅读:
    Linux-C基础知识学习:C语言作业-将5个学生成绩保存在一个数组中,单独实现一个计算平均成绩的average函数, 在main函数中获取该函数返回的平均值,并打印。
    Linux-C基础知识学习:C语言作业-输入两个数,将两个数交换,按升序输出。
    C语言学习:结构体(笔记)--未完待续
    C语言学习:结构体(笔记)
    PHP之函数
    PHP之流程控制
    PHP之常量和变量
    PHP之数据类型
    PHP之标记风格和注释
    VMware虚拟机中各类文件作用详解
  • 原文地址:https://www.cnblogs.com/rosesmall/p/2954278.html
Copyright © 2011-2022 走看看