您的位置:首页 > 其它

基于UDP的简单聊天程序

2013-03-06 14:24 495 查看
#pragma comment(lib,"ws2_32.lib")

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

    char recvBuf[100];

    char sendBuf[100];

    char tempBuf[200];

  

    SOCKADDR_IN addrClient;

    int len = sizeof(SOCKADDR);

    while(1)

    {

        recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);

        if(!strcmp("quit", recvBuf))

        {

            sendto(sockSrv, "quit", strlen("quit") + 1, 0, (SOCKADDR*)&addrClient, len);

            printf("Chat end!\n");

            break;

        }

        sprintf(tempBuf, "%s say:%s\n", 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();

}


编缉推荐阅读以下文章

剖析网络编程(3)-- 基于TCP/UDP网络编程应注意的几个地方
剖析网络编程(2)-- 基于UDP的的网络应用程序
剖析网络编程(1)-- 基于TCP的的网络应用程序

  下面编写聊天客户端程序,实现代码如:

  Chat Client

#pragma comment(lib,"ws2_32.lib")

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

    char recvBuf[100];

    char sendBuf[100];

    char tempBuf[200];

    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(!strcmp("quit", recvBuf))

        {

            sendto(sockClient, "quit", strlen("quit") + 1, 0, (SOCKADDR*)&addrSrv, len);

            printf("Chat end!\n");

            break;

        }

        sprintf(tempBuf, "%s say:%s\n", inet_ntoa(addrSrv.sin_addr), recvBuf);

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

    }

    closesocket(sockClient);

    WSACleanup();

}


  这样我们就实现了一个非常简单的基于UDP的网络聊天程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: