socket图片文件传输示例Word文档格式.docx
- 文档编号:8234000
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:13
- 大小:57.14KB
socket图片文件传输示例Word文档格式.docx
《socket图片文件传输示例Word文档格式.docx》由会员分享,可在线阅读,更多相关《socket图片文件传输示例Word文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
{
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,&
sockmode))
erroronioctl"
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);
printf("
exittoexit"
if(strcmp("
buf))
return0;
}
客户端:
#pragmacomment(lib,"
ws2_32.lib"
)
#include<
winsock.h>
stdio.h>
#include<
iostream.h>
intmain()
{
WSADATAwsaData;
SOCKADDR_INcliaddr;
SOCKETscon;
charbuf0[50];
intn=0,m=0;
intj=0,k=0,l=0,q=0;
union{
chara[4];
intb;
}a;
//存储文件长度,用字符型指针做接收发送api的参数,然后用int型运算
intsockok;
structfd_setfdwrite,fdread;
intcliaddrlen=sizeof(cliaddr);
ULONGsockmode=1;
FILE*fp;
if(WSAStartup(MAKEWORD(2,0),&
wsaData)!
=0)//初始化套接字空间
error1"
return-1;
if((scon=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)//创建套接字
error2"
cliaddr.sin_family=AF_INET;
//初始化为ipv4族
cliaddr.sin_port=htons(8889);
//端口号
cliaddr.sin_addr.s_addr=inet_addr("
127.0.0.1"
//ip地址
/*if(SOCKET_ERROR==bind(scon,(SOCKADDR*)&
cliaddr,cliaddrlen))//显示绑定套接字与地址信息
error3"
*/
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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- socket 图片 文件传输 示例
![提示](https://static.bingdoc.com/images/bang_tan.gif)