小白求帮助。关于C语言socket传输失败的问题

C语言 码拜 4年前 (2016-09-21) 407次浏览
刚刚C语言SOCKET入门,现在正在写一个简单的传输多文件的模块,但是发现服务器在send()的时候发生了问题,数据好像发送不出去(但是之前的send()都可以,就这个模块出来问题…),不知道是不是recv没有取数据导致了数据堆在发送栈上。
出问题的部分代码如下:
客户端:

     for(n=0;n<30;n++)
    {
        SOCKET file_sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
        while(connect(file_sock,(SOCKADDR *)&sockinfo,sizeof(SOCKADDR))!=0)
            continue;
        memcpy(path+big+2,all_province[n],strlen(all_province[n])+1);
        if((fp=fopen(path,"wb"))==NULL)
        {
            perror("无法正确创建省份文件..\n");
            closesocket(file_sock);
            WSACleanup();
            return -1;
        }
        while((lon=recv(file_sock,buf,250,0))>0)
            if(write(buf,1,lon,fp)<=0)
            {
                fclose(fp);
                closesocket(file_sock);
                break;
            }
        fclose(fp);
        closesocket(file_sock);
    }

服务器端:

         for(n=0;n<30;n++)
        {
            SOCKET file_sock=accept(servsock,NULL,NULL);
            memcpy(name+big+2,all_province[n],strlen(all_province[n])+1);
            if((fp=fopen(name,"rb"))==NULL)
            {
                closesocket(file_sock);
                perror("无法打开省份文件..\n");
                goto loop1;
            }
            fseek(fp,0,SEEK_SET);
            while((lon=fread(buf,1,250,fp))>0)
                if(send(file_sock,buf,lon,0)<=0)
                {
                    perror("链接发生错误..\n");
                    closesocket(file_sock);
                    fclose(fp);
                }
            shutdown(file_sock,SD_SEND);
            closesocket(file_sock);
            fclose(fp);
        }

跪求各位大大帮帮忙。已经倒腾一下午了。

解决方案

20

看看send返回值是啥

80

不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明小白求帮助。关于C语言socket传输失败的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)