根据孙鑫的那个教程,编了下网络通信程序,编译没有报错,link也添加了
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 ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
                                
WSACleanup( );
return; 
}

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,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) );
listen (sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[100];
sprintf(sendBuf,"Welcome %s to http://www.163.com",
inet_ntoa(addrClient.sin_addr));

send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockConn); }
 
}客户端程序:
#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 ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
                                
WSACleanup( );
return; 
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,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);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"this is xiaozhu",strlen("this is xiaozhu ")+1,0); closesocket(sockClient);
WSACleanup();
}

解决方案 »

  1.   

    WSAGetLastError看一下是什么值。
    在connect后面加
      

  2.   

    肯定不对
    服务器里面没有accept(),也没有创建用来连接的socket
      

  3.   

    accept(sockSrv,(SOCKADDR*)&addrClient,&len);
    改成accept(sockSrv,NULL,NULL)看看
      

  4.   

    昨天已经调试出来了,主要问题是请求的socket的版本与实际的不符合。
    谢谢各位的回答。
    将其中几个改成如下就可以了。
    wVersionRequested = MAKEWORD( 2, 1 );err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 2 ||
            HIBYTE( wsaData.wVersion ) != 1) {