socket图片文件传输示例
从前在网上找过很多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))==INVALID_SOCKET)
{
printf("error2");
return -1;
{
printf("error on ioctl");
return -1;
}
if((fp=fopen("","rb"))==NULL) //指定的文件是否存在
{ //指定文件不存在
printf("不能打开指定的文件!\n");
}
fseek(fp,0,SEEK_END); //读写指针移动到文件结尾
k==ftell(fp);
code=htonl(m); //返回当前读写指针的位置,即得到文件长度。
p=(char *)&k;
while(1)
{
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_SET(listensocket,&fdread);
for(int i=0;i<totalsock;i++)
{
FD_SET(tempsocket,&fdread);
FD_SET(tempsocket,&fdwrite);
}
if(SOCKET_ERROR==(sockok=select(NULL,&fdread,&fdwrite,NULL,NULL)))
{
printf("error 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))
{
printf("error on ioctl");
return -1;
}
}
memset(buf,0,sizeof(buf));
//memset(buf0,0,sizeo
socket图片文件传输示例 来自淘豆网m.daumloan.com转载请标明出处.