socket图片文件传输示例Word文件下载.docx

上传人:b****4 文档编号:8162159 上传时间:2023-05-10 格式:DOCX 页数:12 大小:17.78KB
下载 相关 举报
socket图片文件传输示例Word文件下载.docx_第1页
第1页 / 共12页
socket图片文件传输示例Word文件下载.docx_第2页
第2页 / 共12页
socket图片文件传输示例Word文件下载.docx_第3页
第3页 / 共12页
socket图片文件传输示例Word文件下载.docx_第4页
第4页 / 共12页
socket图片文件传输示例Word文件下载.docx_第5页
第5页 / 共12页
socket图片文件传输示例Word文件下载.docx_第6页
第6页 / 共12页
socket图片文件传输示例Word文件下载.docx_第7页
第7页 / 共12页
socket图片文件传输示例Word文件下载.docx_第8页
第8页 / 共12页
socket图片文件传输示例Word文件下载.docx_第9页
第9页 / 共12页
socket图片文件传输示例Word文件下载.docx_第10页
第10页 / 共12页
socket图片文件传输示例Word文件下载.docx_第11页
第11页 / 共12页
socket图片文件传输示例Word文件下载.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

socket图片文件传输示例Word文件下载.docx

《socket图片文件传输示例Word文件下载.docx》由会员分享,可在线阅读,更多相关《socket图片文件传输示例Word文件下载.docx(12页珍藏版)》请在冰点文库上搜索。

socket图片文件传输示例Word文件下载.docx

longcode;

intn,he=0,m=0,k=0,b=0;

char*p;

if(WSAStartup(MAKEWORD(2,0),&

wsaData)!

=0)

{

printf("

error1"

);

return-1;

}

if((listensocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)

error2"

}

seraddr.sin_family=AF_INET;

seraddr.sin_port=htons(8889);

seraddr.sin_addr.s_addr=inet_addr("

127.0.0.1"

if(SOCKET_ERROR==bind(listensocket,(SOCKADDR*)&

seraddr,sizeof(seraddr)))

error3"

if(SOCKET_ERROR==listen(listensocket,5))

error4"

printf("

waitask"

sockmode=1;

if(SOCKET_ERROR==ioctlsocket(listensocket,FIONBIO,&

sockmode))

erroronioctl"

if((fp=fopen("

output.jpg"

"

rb"

))==NULL)//指定的文件是否存在

{//指定文件不存在

不能打开指定的文件!

\n"

fseek(fp,0,SEEK_END);

//读写指针移动到文件结尾

k=a.b=ftell(fp);

code=htonl(m);

//返回当前读写指针的位置,即得到文件长度。

p=(char*)&

k;

while

(1)

FD_ZERO(&

fdread);

FD_ZERO(&

fdwrite);

FD_SET(listensocket,&

for(inti=0;

i<

totalsock;

i++)

{

FD_SET(tempsocket,&

}

if(SOCKET_ERROR==(sockok=select(NULL,&

fdread,&

fdwrite,NULL,NULL)))

printf("

erroronselect"

return-1;

if(FD_ISSET(listensocket,&

fdread))

sockok--;

if(INVALID_SOCKET==(newconnection=accept(listensocket,(SOCKADDR*)&

cliaddr,&

cliaddrlen)))

{

printf("

error5"

return-1;

}

else

come"

totalsock++;

tempsocket=newconnection;

if(SOCKET_ERROR==ioctlsocket(newconnection,FIONBIO,&

memset(buf,0,sizeof(buf));

//memset(buf0,0,sizeof(buf0));

if(FD_ISSET(newconnection,&

memset(buf,0,sizeof(buf));

if(flag.b==2)

if(recv(newconnection,flag.a,sizeof(flag),0)<

0)

erroronrecvlong"

//if(a.b==0)a.b=2;

//else

//if(recv(newconnection,buf,sizeof(buf),0)==SOCKET_ERROR)

//{

//printf("

erroronrecvack"

//return-1;

//}

//if(strcmp(buf,"

exit"

)==0)

//{

conpletecopy"

//break;

fdwrite))

//gets(buf0);

if(a.b&

&

flag.b==0)

if((b=send(newconnection,a.a,sizeof(a),0))<

{

erroronsend"

//memset(a.a,0,sizeof(a));

}

flag.b=2;

if(flag.b==1)

//打开文件,并把文件内容发送到客户方,然后关闭文件和套接字

rewind(fp);

//文件读写指针移动到文件开头

while(!

feof(fp))//文件未结束

{

memset(buf,0,BUFLEN);

//清除缓存中的内容

n=fread(buf,1,BUFLEN,fp);

//读取文件内容到缓存

if(m=send(newconnection,buf,n,0))

if(m<

{

printf("

erroronsendmain"

m=GetLastError();

return-1;

}

if((he+=m)>

=k)

copycomplete"

}//send(clientSock,buf,n,0);

//把文件内容发送给客户方

}

fclose(fp);

break;

//if(strcmp(buf0,"

//break;

 

WSACleanup();

gets(buf);

exittoexit"

if(strcmp("

buf))

return0;

客户端:

#include<

iostream.h>

SOCKADDR_INcliaddr;

SOCKETscon;

charbuf0[50];

intn=0,m=0;

intj=0,k=0,l=0,q=0;

union{

}a;

//存储文件长度,用字符型指针做接收发送api的参数,然后用int型运算

intsockok;

ULONGsockmode=1;

=0)//初始化套接字空间

if((scon=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)//创建套接字

cliaddr.sin_family=AF_INET;

//初始化为ipv4族

cliaddr.sin_port=htons(8889);

//端口号

cliaddr.sin_addr.s_addr=inet_addr("

//ip地址

/*if(SOCKET_ERROR==bind(scon,(SOCKADDR*)&

cliaddr,cliaddrlen))//显示绑定套接字与地址信息

*/

connect...\n"

if(SOCKET_ERROR==connect(scon,(SOCKADDR*)&

cliaddr,cliaddrlen))//连接远端主机

error4connectfailed"

done\n"

if(SOCKET_ERROR==ioctlsocket(scon,FIONBIO,&

sockmode))//修改套接字为非阻塞

if(!

(fp=fopen("

input.jpg"

wb+"

)))//打开已有或创建一个二进制文件

erroronfopen"

for(inti=0;

;

i++)//死循环

FD_SET(scon,&

if((sockok=select(0,&

fdwrite,NULL,NULL))<

0)//选择出可读写的套接字用形参接收

if(m==-2)break;

//完成传送文件标志位m==-2

//memset(buf,0,sizeof(buf));

memset(buf0,0,sizeof(buf0));

//清缓存

//gets(buf);

//if(strcmp("

buf)==0)

//{

//printf("

exit.."

//return0;

//}

/*if(send(scon,buf,strlen(buf),0)==SOCKET_ERROR)

continue;

else

printf(buf0);

*/

//gets(p);

//n=(long)*p;

while(FD_ISSET(scon,&

fdread)&

(sockok--)&

(m!

=-2))//判断是否有可读套接字

if(l==0)//文件长度接收标志l==1为接收了

{

if((q=recv(scon,a.a,sizeof(a),0))<

0)//接收文件长度

printf("

return-1;

l=1;

if(l==2)//文件长度接收并返回确认信息了

memset(buf0,0,sizeof(buf0));

while((n=recv(scon,buf0,sizeof(buf0),0))>

0)//接收主文件

//continue;

m=fwrite(buf0,n,1,fp);

memset(buf0,0,sizeof(buf0));

if((m==1)&

((a.b-=n)<

=0))//文件写入本地且文件接收长度达到文件长度 结束

cout<

<

a.b<

endl;

n<

m<

send(scon,"

strlen("

),0);

printf("

completecopy"

m=-2;

//printf("

complatecopy"

break;

if(FD_ISSET(scon,&

fdwrite)&

sockok--)

if(l==1)

if(send(scon,(char*)&

l,sizeof(&

l),0)<

0)//确认收到文件长度

return-1;

l=2;

/*else{

printf(buf0);

}*/

if(fp)

fclose(fp);

closesocket(scon);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2