久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

利用socket傳輸圖片或文件的代碼實(shí)例

 成長的園地.a 2011-09-01

看到網(wǎng)上很多人在問Linux下,,如何用socket傳輸一個圖片或文件,,其實(shí)這個普通的socket通信區(qū)別不大,基本的流程就是打開文件-〉讀取-〉寫入。下面我寫了一個小測試程序,可以供大家參考,下面的程序是本人在CentOS4.2下測試通過的,,可以正常工作,。

/* server端代碼:接受Client端發(fā)送過來的一個圖片 */

#include   <sys/socket.h>

#include   <sys/types.h>

#include   <stdlib.h>

#include   <stdio.h>

#include   <string.h>

#include   <unistd.h>

#include   <error.h>

#include   <netinet/in.h>

#include   <arpa/inet.h>

#define   SER_PORT      1900

#define   MAX_LEN       256


int main(int argc,char **argv)

{

        int     listensd,connectsd;

        struct sockaddr_in   server;

        struct sockaddr_in   client;

        char    buf[MAX_LEN] = "\0";

        FILE    *fp;

        int     opt = 1;

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

        {

                perror("socket");

                exit(1);

        }

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

         bzero(&server,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");

                close(listensd);

                exit(1);

        }

         if( listen(listensd,5) == -1 )

        {

                perror("listen");

                close(listensd);

                exit(1);

        }

         if( ( fp = fopen("new1.jpg","ab") ) == NULL )

        {

                perror("File");

                close(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);

                }

                close(connectsd);

                fclose(fp);

        }

        close(listensd);

        return   0;

}  

---------------------------------------------------------------------------------------------------------------------------------

/* client端代碼:向server端傳輸一個圖片1.jpg */

#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;

}  

上面的代碼是用來傳輸一個圖片的,對于普通的文件一樣適用(已測試通過),,其中需要注意的,,在發(fā)送和接受圖片或文件時(shí),特別需要注意while循環(huán)的控制,,如果考慮不仔細(xì)會出現(xiàn)傳輸數(shù)據(jù)不全(可能是圖片沒傳完或文件傳輸?shù)牟煌暾┗騻鬏數(shù)臄?shù)據(jù)超了等錯誤,。

呵呵,基本就這些吧,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多