qq_35998583 2016-09-16 10:14 采纳率: 0%
浏览 808

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

刚刚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);
        }
  • 写回答

1条回答

  • qq_35998583 2016-09-16 10:15
    关注

    各位大大帮帮忙...已经倒腾一下午了...

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?