socket图片文件传输示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从前在网上找过很多sock编程的资料,都很高深。。。。
对于入门级的我来说,简单又不简陋的小例子更好一些,所以总结一下刚写的小例子,用select模型实现的jpg文件传输,并不完善,只作为今后的一个参考。
代码经过调试,应该能用吧。。。。。
服务器端:
#pragma comment (lib,"")
#include <>
#include <>
#define BUFLEN sizeof(buf)
int main()
{
WSADATA wsaData;
SOCKADDR_IN seraddr,cliaddr;
SOCKET listensocket,newconnection,tempsocket;
ULONG sockmode;
int sockok,totalsock=0;
struct fd_set fdwrite,fdread;
char buf[10],buf0[10];
union {
char a[4];
int b;
}a,flag;
==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((listensocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INV ALID_SOCKET)
{
printf("error2");
return -1;
}
=AF_INET;
=htons(8889);
"");
if(SOCKET_ERROR==bind(listensocket,(SOCKADDR*)&seraddr,sizeof(s eraddr)))
{
printf("error3");
return -1;
}
if(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("","rb"))==NULL) .\n");
if(SOCKET_ERROR==connect(scon,(SOCKADDR
*)&cliaddr,cliaddrlen))");
// 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)//文件长度接收标志l==1为接收了
{
if((q=recv(scon,,sizeof(a),0))<0)//接收文件长度
{
printf("error on recv long");
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)&&(=n)<=0))//文件写入本地且文件接收
长度达到文件长度结束
{
cout<<< cout< cout< 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)//确认收到