ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:17.72KB ,
资源ID:24630274      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24630274.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(socket图片文件传输示例.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

socket图片文件传输示例.docx

1、socket图片文件传输示例从前在网上找过很多编程的资料,都很高深。对于入门级的我来说,简单又不简陋的小例子更好一些,所以总结一下刚写的小例子,用select模型实现的文件传输,并不完善,只作为今后的一个参考。代码经过调试,应该能用吧。服务器端:#pragma comment (lib,ws2_32.lib)#include #include #define BUFLEN sizeof(buf)int main() WSADATA wsaData; SOCKADDR_IN seraddr,cliaddr; SOCKET listensocket,newconnection,tempsocket

2、; ULONG sockmode; int sockok,totalsock=0; struct fd_set fdwrite,fdread; char buf10,buf010; union char a4; int b; a,flag; a.b=flag.b=0; int cliaddrlen=sizeof(cliaddr); FILE *fp; long code; int n,he=0,m=0,k=0,b=0; char *p; if ( WSAStartup( MAKEWORD(2,0), &wsaData ) != 0 ) printf(error1); return -1; if

3、(listensocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)=INVALID_SOCKET) printf(error2); return -1; 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) printf(error3); return -1; if

4、(SOCKET_ERROR=listen(listensocket,5) printf(error4); return -1; printf(wait ask); sockmode=1; if(SOCKET_ERROR=ioctlsocket(listensocket,FIONBIO,&sockmode) printf(error on ioctl); return -1; if(fp=fopen(output.jpg,rb)=NULL) /指定的文件是否存在 /指定文件不存在 printf(不能打开指定的文件!n); fseek(fp,0,SEEK_END); /读写指针移动到文件结尾 k=

5、a.b=ftell(fp); code=htonl(m); /返回当前读写指针的位置,即得到文件长度。 p=(char *)&k; while(1) FD_ZERO(&fdread); FD_ZERO(&fdwrite); FD_SET(listensocket,&fdread); for(int i=0;itotalsock;i+) FD_SET(tempsocket,&fdread); FD_SET(tempsocket,&fdwrite); if(SOCKET_ERROR=(sockok=select(NULL,&fdread,&fdwrite,NULL,NULL) printf(err

6、or on select); return -1; if(FD_ISSET(listensocket,&fdread) sockok-; if(INVALID_SOCKET=(newconnection=accept(listensocket,(SOCKADDR*)&cliaddr,&cliaddrlen) printf(error5); return -1; else printf(come); totalsock+; tempsocket=newconnection; if(SOCKET_ERROR=ioctlsocket(newconnection,FIONBIO,&sockmode)

7、printf(error on ioctl); return -1; memset(buf,0,sizeof(buf); /memset(buf0,0,sizeof(buf0); if(FD_ISSET(newconnection,&fdread) memset(buf,0,sizeof(buf); if(flag.b=2) if(recv(newconnection,flag.a,sizeof(flag),0)0) printf(error on recv long); return -1; /if(a.b=0) a.b=2; /else /if(recv(newconnection,buf

8、,sizeof(buf),0)=SOCKET_ERROR) / / printf(error on recv ack); / return -1; / /if(strcmp(buf,exit)=0) / / printf(conplete copy); / break; / if(FD_ISSET(newconnection,&fdwrite) /gets(buf0); sockok-; if(a.b&flag.b=0) if(b=send(newconnection,a.a,sizeof(a),0)0) printf(error on send); return -1; /memset(a.

9、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=k) printf(copy complete); /send(clientSock,buf,n,0); /把文件内容发送给客户方 fclose(f

10、p); break; /if(strcmp(buf0,exit)=0) / break; WSACleanup( ); gets(buf); printf(exit to exit); if(strcmp(exit,buf) return 0;客户端:#pragma comment (lib,ws2_32.lib)#include #include #includeint main() WSADATA wsaData; SOCKADDR_IN cliaddr; SOCKET scon; char buf050; int n=0,m=0; int j=0,k=0,l=0,q=0; union c

11、har a4; int b; a;/存储文件长度,用字符型指针做接收发送的参数,然后用型运算 int sockok; struct fd_set fdwrite,fdread; int cliaddrlen=sizeof(cliaddr); ULONG sockmode=1; FILE *fp; if ( WSAStartup( MAKEWORD(2,0), &wsaData ) != 0 )/初始化套接字空间 printf(error1); return -1; if(scon=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)=INVALID_SOCKET)/创

12、建套接字 printf(error2); return -1; cliaddr.sin_family=AF_INET; /初始化为ipv4族 cliaddr.sin_port=htons(8889); /端口号 cliaddr.sin_addr.s_addr=inet_addr(127.0.0.1); /地址 /* if(SOCKET_ERROR=bind(scon,(SOCKADDR*)&cliaddr,cliaddrlen)/显示绑定套接字与地址信息 printf(error3); return -1; */ printf(connect.n); if(SOCKET_ERROR=conne

13、ct(scon,(SOCKADDR *)&cliaddr,cliaddrlen)/连接远端主机 printf(error4 connect failed); return -1; printf(donen); if(SOCKET_ERROR=ioctlsocket(scon,FIONBIO,&sockmode) /修改套接字为非阻塞 printf(error on ioctl); return -1; if(!(fp=fopen(input.jpg,wb+) /打开已有或创建一个二进制文件 printf(error on fopen); for(int i=0;i+)/死循环 FD_ZERO(

14、&fdwrite); FD_ZERO(&fdread); FD_SET(scon,&fdwrite); FD_SET(scon,&fdread); if(sockok=select(0,&fdread,&fdwrite,NULL,NULL)0)/选择出可读写的套接字用形参接收 printf(error on select); return -1; if(m=-2) break;/完成传送文件标志位 /memset(buf,0,sizeof(buf); memset(buf0,0,sizeof(buf0);/清缓存 /gets(buf); /if(strcmp(exit,buf)=0) / /

15、printf(exit.); / return 0; / /*if(send(scon,buf,strlen(buf),0)=SOCKET_ERROR) continue; else printf(buf0); printf(n); */ /gets(p); /n=(long)*p; while(FD_ISSET(scon,&fdread)&(sockok-)&(m!=-2)/判断是否有可读套接字 if(l=0)/文件长度接收标志为接收了 if(q=recv(scon,a.a,sizeof(a),0)0)/接收主文件 /continue; m= fwrite(buf0,n,1,fp); mem

16、set(buf0,0,sizeof(buf0); if(m=1)&(a.b-=n)=0)/文件写入本地且文件接收长度达到文件长度结束 couta.bendl; coutnendl; coutmendl; send(scon,exit,strlen(exit),0); printf(complete copy); m=-2; /printf(complate copy); break; if(FD_ISSET(scon,&fdwrite)&sockok-) if(l=1) if(send(scon,(char*)&l,sizeof(&l),0)0)/确认收到文件长度 printf(error on send); return -1; l=2; /*else printf(buf0); printf(n); */ if(fp) fclose(fp); closesocket(scon); WSACleanup( );

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1