#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>#define RCVPORT 1990
#define NUM 1024
#define STOP 100
union type{
int a;
char b[4];
};
int
//mynet(int my_nt)
main(void)
{
union type A;
int sd;
int i=0;
int stat_st_size=0;
int pos,pos1,fd;
char *p;
int len1;
struct sockaddr_in peer_addr;
socklen_t addr_len;
int len;
int times;
char buf[NUM];
char huancun[20];
sd = socket(PF_INET, SOCK_STREAM, 0);
if(sd < 0){
perror("socket()");
return -1;
}
peer_addr.sin_family = PF_INET; IPV4
peer_addr.sin_port = htons(RCVPORT);
inet_pton(PF_INET, "0.0.0.0", &peer_addr.sin_addr);//本機ip
addr_len = sizeof(peer_addr);
if(connect(sd, (void*)&peer_addr, sizeof(peer_addr)) < 0){
fprintf(stderr,"connect()\n");
return -1;
}
// buf[0]=(char)my_nt;//選項
buf[0]=1;
i=0;
while(1){
len = write(sd, buf, 1);//發送選項1字節
if(len < 0){
fprintf(stderr, "write()\n");
return -1;
}
if(len==0)
break;
printf("%d \n",buf[0]);
len=read(sd,buf,4);//等待服務器回應4字節文件長度
if(len<0){
perror("read()");
return -1;
}
A.b[0]=buf[0];
A.b[1]=buf[1];
A.b[2]=buf[2];
A.b[3]=buf[3];
stat_st_size=A.a;
printf("stat_st_size=%d",stat_st_size);
if(stat_st_size==STOP)
break;
if(stat_st_size>0)
{
if(i==0){
sprintf(huancun,"mus/%d.wma",i+1);//創建音樂文件
i++;
continue;
}
else
sprintf(huancun,"pic/%d.jpg",i++);//開始創建圖片
fd=open(huancun,O_RDWR|O_CREAT,0644);
if(fd < 0){
perror("open()");
return -1;
}
while(stat_st_size){
pos=0;
pos1=0;
len=read(sd,buf+pos,NUM);
pos+=len;
if(len<0){
perror("read()");
printf("read buf fail");
return -1;
}
len1=write(fd,buf-pos1,len);
pos1+=len1;
if(len<0){
perror("write()");
printf("write buf fail");
return -1;
}
stat_st_size-=len;
}
close(fd);
buf[0]=0;
printf("buf0= %d \n",buf[0]);
}
else
break;
}
close(sd);
return 0;
}
|