一个客户端程序netclient,一个服务器程序netsrv;两个工程都放在一个目录下:
//netsrv.cpp#include <Winsock2.h>
#include <stdio.h>
#include <iostream>using std::cout;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);
cout<<tempBuf;
printf("Please input data:\n");
gets(sendBuf);
sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);
}
closesocket(sockSrv);
WSACleanup();
}
//netclient.cpp
#include <Winsock2.h>
#include <stdio.h>
#include <iostream>using std::cout;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);
cout<<tempBuf; }
closesocket(sockClient);
WSACleanup();
}
运行时报错如下:
1>------ 已启动全部重新生成: 项目: netclient, 配置: Debug Win32 ------
1>正在删除项目“netclient”(配置“Debug|Win32”)的中间文件和输出文件
2>------ 已启动全部重新生成: 项目: netsrv, 配置: Debug Win32 ------
2>正在删除项目“netsrv”(配置“Debug|Win32”)的中间文件和输出文件
2>正在编译...
1>正在编译...
2>netsrv.cpp
1>netclient.cpp
2>e:\study\netfirst\netfirst\netsrv.cpp(1) : fatal error C1083: 无法打开包括文件:“Winsock2”: No such file or directory
1>e:\study\netfirst\netclient\netclient.cpp(43) : warning C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(279) : 参见“gets”的声明
1>e:\study\netfirst\netclient\netclient.cpp(54) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 参见“sprintf”的声明
1>正在编译资源清单...
2>生成日志保存在“file://e:\study\netfirst\netfirst\Debug\BuildLog.htm”
2>netsrv - 1 个错误,0 个警告
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>正在链接...
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__closesocket@4,该符号在函数 _main 中被引用
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__inet_ntoa@4,该符号在函数 _main 中被引用
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__recvfrom@24,该符号在函数 _main 中被引用
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__sendto@24,该符号在函数 _main 中被引用
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__htons@4,该符号在函数 _main 中被引用
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__inet_addr@4,该符号在函数 _main 中被引用
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__socket@12,该符号在函数 _main 中被引用
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 _main 中被引用
1>netclient.obj : error LNK2019: 无法解析的外部符号 __imp__WSAStartup@8,该符号在函数 _main 中被引用
1>E:\study\netfirst\Debug\netclient.exe : fatal error LNK1120: 9 个无法解析的外部命令
1>生成日志保存在“file://e:\study\netfirst\netclient\Debug\BuildLog.htm”
1>netclient - 10 个错误,2 个警告
========== 全部重新生成: 成功 0 个,失败 2 个,跳过 0 个 ==========请问在vs2008下如何加载一个动态链接库,在此程序中要加载 ws2_32.lib文件(是不是我没加载此库文件的问题导致的),
也请诸位高手运行调试一番,请指教.

解决方案 »

  1.   

    正是没有link ws2_32.lib这个lib文件
      

  2.   

    缺少库,添加一个lib就可以了,如下:
    ……
    using std::cout;#pragma comment(lib, "Ws2_32.lib")void main()
    ……
      

  3.   

    为什我这个udp的聊天程序的聊天内容是乱码:please input data:
    hello
    127.0.0.1 say:烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
    烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
    please input data:
      

  4.   

    tempBuf你没有初始化
      

  5.   

    一是没有连接lib文件,
    二是没有初始化buffer,用memset等
      

  6.   

    我将三个char数组初化为空 
             char recvBuf[100]={""};
    char sendBuf[100]={""};
    char tempBuf[200]={""};服务端还是不能接收客户端的信息!
      

  7.   

    char recvBuf[100]; 
    memset(recvBuf,0,100);
    char sendBuf[100]; 
    memset(sendBuf,0,100);
    char tempBuf[200]; 
    memset(tempBuf,0,100);