回 帖 发 新 帖 刷新版面

主题:请教高手UDP聊天的问题

在学习孙鑫老师的VC++过程中 在14章做UDP聊天功能程序时  出现了服务器和客户端不能正常连接的情况  本人用孙鑫老师的教材的源代码  编译运行也不行  不知道是不是电脑哪里问题  请教各位大虾  我贴一下源程序吧  在运行TCP时可以正常连接   但是想改成聊天程序  感觉比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));

    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('q'==recvBuf[0])
        {
            sendto(sockSrv,"q",strlen("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();
}



客户端:
#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('q'==recvBuf[0])
        {
            sendto(sockClient,"q",strlen("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();
}

回复列表 (共2个回复)

沙发

你用孙鑫的源码也不行。证明不是程序写错了。主要是看看库文件配置好没有。要链接wsock32.lib


如果都正确了。还不行。比如出现绑定失败什么的。你可以把6000这个端口号换一下试试。

板凳


谢谢。。。改了端口就可以了  3q

我来回复

您尚未登录,请登录后再回复。点此登录或注册