2 qq 35998583 qq_35998583 于 2016.09.16 18:14 提问

小白求助...关于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
qq_35998583   2016.09.16 18:15

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言Socket图片传输中的图片保存问题
需求描述:客户端发送指定图片到服务器上,服务器保存该图片,保存名字为当前系统时间。      实现中遇到的问题:因为在传输图片过程中,服务器需要持续性的将获得的数据保存起来,怎么保存呢?可以write到文件中,或者保存到某一个数组中?讨论前者,如果保存到文件中,那么如果客户端要发送多个图片,那每次都写入到同一个文件中了,怎么解决这个问题。      解决方法:在传输过程中,依然先把该图片保存到
C语言socket通信发送结构体的问题
Socket 通信中需要发送/接收结构体时,不能直接发送/接收结构体,需要先把结构体进行转化,如: typedef struct  {     int client_sockfd;     char client_name[30];     char buff[100]; }message; 在发送时需要先定义一个数组: char snd_buf[1024] = {0};再定义一个结构体指针或变
C语言+Socket实现文件传输
实现文件传输功能~使用与初学者对socket的了解和深一步的研究!希望能给大家带来帮助
linux下c语言实现图片的socket传输和数据库的存储
最近项目需要,需要在C端运用socket传输图片,客户端读取图片信息,然后通过socket传输到服务端,服务端接收图片信息后,将图片存入数据库内。 具体如下; 一、客户端读取图片 FILE *fp = fopen("qr.jpg", "rb"); //打开文件 //获取文件数据长度。  fseek(fp, 0, SEEK_END);// 指定到文件尾 int flen = ftel
socket应用(一)如何利用C语言写文件传输的程序 源代码
具体内容请看博文,这是完整的可以传输文件程序的源代码
C语言socket 蓝牙文件传输
C语言socket文件传输
socket应用(一)如何利用C语言写文件传输的程序
在网上搜了很久,也没有找到很具体和实用的发送文件的C源程序,于是就自己研究了半天,编写了个可以无差错传文件的程序,拿出来晒晒,以下中括号里的就是调用的函数,具体源文件我放到资源里了,大家可以去下载http://download.csdn.net/user/sophisticated。    服务器端(发送文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以发送二进制文
c语言socket 传输 大数据量
[php] view plaincopy int server_sock,client_sock;       socklen_t server_len,client_len;       struct sockaddr_in server_address;       struct sockaddr_in client_address;       int 
安卓使用Socket发送中文,C语言服务端接收乱码问题解决方案
今天用安卓通过Socket发送数据到电脑上使用C语言写的服务端,发送英文没有问题,可当把数据改变成中文时,服务端接收到的数据确是乱码。     突然想到,VS的预处理使用的是ANSI编码,而安卓网络数据都是UTF8格式的,这样直接使用printf打印出出来的当然是乱码,所以解决方法就是把UFT8格式的数据转换成ANSI!     避免大家遇到类似问题,少走弯路,我现在把自己找的转码函数
linux环境下C语言实现图片的socket传输并保存到数据库
压缩包内包含客户端imclient.c 服务端imserver.c 以及makefile,测试在64位centos机器下运行,需要安装mysql数据。程序流程,客户端通过读取图片数据然后通过socket将图片数据发送给服务端,服务端接收数据后,插入数据库。注意;数据库字段位blob类型,UTF8编码格式。