现在的位置: 首页 > 综合 > 正文

基于UDP的简单聊天程序

2014年03月28日 ⁄ 综合 ⁄ 共 2809字 ⁄ 字号 评论关闭

#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的网络聊天程序。

抱歉!评论已关闭.