初学网络编程,这个程序是服务端,一运行就不停的接收到数据是怎么回事?(正常应该是等到客户端启动后收到客户端发送的数据)
#include "Winsock2.h"
#include "stdio.h"
#include "WINSOCK.H"void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
} if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return; 
} SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addr.sin_port=htons(6000); connect(sock,(SOCKADDR *)&addr,sizeof(SOCKADDR));

    char buff[100];
recv(sock,buff,100,0);
printf("%s\n",buff);
send(sock,"client asking for connect...",sizeof("client asking for connect..."),0); closesocket(sock);
WSACleanup();}

解决方案 »

  1.   

    给你 看看我写的 我的能正常的运行  看看有什么区别 发现问题
    服务端
    #include <stdio.h>
    #include <winsock2.h>
    void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 1, 1 );     //请求WINSOCKET库

    err = WSAStartup( wVersionRequested, &wsaData ); //加载WINSOCKET库
    if ( err != 0 ) 
    {                                 
    return;
    }                                  

    if ( LOBYTE( wsaData.wVersion ) !=1 || HIBYTE( wsaData.wVersion ) !=1 ) 
    {                                  
    WSACleanup( );
    return; 
    }
        SOCKET socketserver=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrserver;
    addrserver.sin_family=AF_INET;
    addrserver.sin_port=6000;
    addrserver.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

    bind(socketserver,(SOCKADDR*)&addrserver,sizeof(SOCKADDR)); listen(socketserver,2);
    SOCKADDR_IN addrclient;
    int len=sizeof(SOCKADDR);

    char sendbf[100];
    char recvbf[100];
    char tempbf[100];
    SOCKET newsocket; while(1)
    {
     newsocket=accept(socketserver,(SOCKADDR*)&addrclient,&len );

    // sprintf(sendbf," %s",inet_ntoa(addrclient.sin_addr) );

    recv(newsocket,recvbf,strlen(recvbf)+1,0);
    sprintf(tempbf,"%s say %s:",inet_ntoa(addrclient.sin_addr),recvbf);
    printf("%s\n",tempbf); printf("shuru shuju:");
    gets(sendbf);
    send(newsocket,sendbf,strlen(sendbf)+1,0);
    }
    closesocket(newsocket);
    WSACleanup( );}
      

  2.   

    发错了,这个才是服务端
    #include "Winsock2.h"
    #include "stdio.h"
    #include "WINSOCK.H"void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 2, 2 );

    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {
    return;
    } if ( LOBYTE( wsaData.wVersion ) != 2 ||
            HIBYTE( wsaData.wVersion ) != 2 ) {
    WSACleanup( );
    return; 
    } SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
    sockaddr_in addr;
    addr.sin_family=AF_INET;
    addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    addr.sin_port=htons(6000);

    bind(sock,(SOCKADDR *)&addr,sizeof(SOCKET));
    listen(sock,5);

        sockaddr_in rec_addr;
    int len=sizeof(SOCKADDR);
    char buff[100];
    int i=0;
    while(i++<100)
    {
    SOCKET rec=accept(sock,(SOCKADDR *)&rec_addr,&len);
    //send(rec,"scy",sizeof("scy")+1,0);
    recv(rec,buff,100,0);
    printf("receive from %s: %s",inet_ntoa(rec_addr.sin_addr),recv);
    closesocket(rec);
    }
    WSACleanup();}