读书人

socket编程 服务器端一运行就关闭,如何

发布时间: 2012-04-12 15:46:35 作者: rapoo

socket编程 服务器端一运行就关闭,怎么解决?
我用vc编一个socket通信的服务器端 但是 点击 连接按钮之后 对话框就关了 这是为什么呢 ?
下面是按钮的代码

C/C++ code
#define THUMWIDTH 150#define THUMHEIGHT 150void CListImage::OnButton4() {struct sockaddr_in   server;         struct sockaddr_in   client;         char    buf[MAX_LEN] = "\0";        int     listensd,connectsd;         FILE    *fp;         int     opt = 1;         if( ( listensd = socket(AF_INET,SOCK_STREAM,0) ) == -1 ){                 perror("socket");                 exit(1);         }         setsockopt(listensd,SOL_SOCKET,SO_REUSEADDR,( const char* )&opt,sizeof(opt));         memset(&server,0,sizeof(server));         server.sin_family = AF_INET;         server.sin_port = htons(SER_PORT);         server.sin_addr.s_addr = htonl(INADDR_ANY);                if( bind(listensd,(struct sockaddr *)&server,sizeof(server)) < 0)         {                 perror("Bind");                closesocket(listensd);                 exit(1);         }          if( listen(listensd,5) == -1 ){                 perror("listen");                 closesocket(listensd);                 exit(1);         }          if( ( fp = fopen("new3.png","ab") ) == NULL ){                 perror("File");                 closesocket(listensd);                 exit(1);         }         while( 1 )                  {                 int   rn ;                 int   sin_len = sizeof(client);                 if( (connectsd = accept(listensd,(struct sockaddr *)&client,&sin_len)) < 0 ) {                         perror("accept");                         continue;                 }                 while( 1 )                {                                                 rn =read(connectsd,buf,MAX_LEN);                                                                   if(rn == 0)                                break;                        fwrite(buf,1,rn,fp);                }                closesocket(connectsd);                fclose(fp);        }         closesocket(listensd);     // TODO: Add your control notification handler code here    }






[解决办法]
觉得有可能是没有WSAStartup初始化,不过这个自己F10单步跟踪调试下,应该很好找到原因的……
[解决办法]
我的建议是每调用一个socket函数返回值与SOCKET_ERROR比较,相等时用一个整型变量接受WSAGetLastError();错误代码的返回值,这样很容易判断出错的原因

读书人网 >VC/MFC

热点推荐