主题 : 关于网络传输图片问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 21161
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2010-05-12
最后登录: 2010-05-17
楼主  发表于: 2010-05-17 11:06

 关于网络传输图片问题

在llinux进行图片传输的时候 碰到了一个问题 希望大家能帮忙解决下 就是我在在服务器端不能接受到图片

我的客户端代码
include   <stdio.h>

#include   <sys/socket.h>

#include   <stdlib.h>

#include   <sys/types.h>

#include   <string.h>

#include   <unistd.h>

#include   <netinet/in.h>

#include   <arpa/inet.h>

#include   <netdb.h>

#define   SER_PORT      1900

#define   MAX_LEN      256



int main(int argc,char **argv)

{

        int     sd,rn;

        struct sockaddr_in   client,server;

        char    buf[MAX_LEN];

        FILE    *fq;

        int     len,opt = 1;



        if( ( sd = socket(AF_INET,SOCK_STREAM,0)) == -1 )

        {

                perror("socket");

                exit(1);

        }

        bzero(&server,sizeof(server));

        server.sin_family = AF_INET;

        server.sin_port = htons(SER_PORT);

        server.sin_addr.s_addr = inet_addr("192.168.150.37");

         setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));

         if( connect(sd,(struct sockaddr *)&server,sizeof(server)) < 0 )

        {

                perror("Connect");

                close(sd);

                exit(1);

        }

        if( ( fq = fopen("1.jpg","rb") ) == NULL )

        {

                perror("File open");

                close(sd);

                exit(1);

        }

        bzero(buf,sizeof(buf));

        while( !feof(fq) )

        {

                len = fread(buf,1,MAX_LEN,fq);

                if( len != write(sd,buf,len) )

                {

                        perror("write");

                        break;

               }

        }

        close(sd);

        fclose(fq);

        return 0;

}

这是我服务器代码
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define portnumber 1900

int main(int argc, char *argv[])
{
    int sockfd,new_fd;
        FILE* fp;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    int sin_size;
    int nbytes;
    char buffer[256];
    

        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)     {
        fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
        exit(1);
    }

       bzero(&server_addr,sizeof(struct sockaddr_in));    
       server_addr.sin_family=AF_INET;                
    server_addr.sin_addr.s_addr=htonl(INADDR_ANY);  
    server_addr.sin_port=htons(portnumber);            
    
    if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
    {
        fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
        exit(1);
    }

    if(listen(sockfd,5)==-1)
    {
        fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
        exit(1);
    }

    while(1)
    {
        
        sin_size=sizeof(struct sockaddr_in);
        if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
        {
            fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
            exit(1);
        }    
        
               if((nbytes=read(new_fd,buffer,256))==-1)
        {
            fprintf(stderr,"Read Error:%s\n",strerror(errno));
            exit(1);
        }
                if(nbytes == 1 && buffer[0]=1)
                 {

                   break;
                 }
          fp =fopen("mm.jpg","a+");
                fwrite(buffer,1,nbytes,fp);

        
    }
       close(fp);
    close(sockfd);
    exit(0);
}