文件上传代码
main.c
#include"head.h"
#define SER_IP "192.168.8.101"
int main(int argc, const char *argv[])
{
int ucfd =socket(AF_INET,SOCK_DGRAM,0);
if(ucfd<0)
{
ERR_MSG("socket");
return -1;
}
struct sockaddr_in ucin;
ucin.sin_family = AF_INET;
ucin.sin_port = htons(69);
ucin.sin_addr.s_addr = inet_addr(SER_IP);
struct sockaddr_in usin;
socklen_t rlen=sizeof(usin),slen=sizeof(ucin);
char buf[516];
short *pa=(short*)buf;
*pa=htons(2);
// printf("pa=%d\n",*pa);
char *pb=buf+2;
strcpy(pb,argv[1]);
char *pc=buf+2+strlen(pb)+1;
strcpy(pc,"octet");
size_t buf_len =2+strlen(pb)+1+strlen(pc)+1;
sendto(ucfd,buf,buf_len,0,(struct sockaddr*)&ucin,slen);
char back_codes[4];
recvfrom(ucfd,back_codes,sizeof(back_codes),0,(struct sockaddr*)&usin,&rlen);
if(connect(ucfd,(struct sockaddr*)&usin,rlen)<0)
{
ERR_MSG("connect");
return -1;
}
short make_code,c_code;
make_code = ntohs(*(short*)back_codes);
c_code =ntohs(*(short*)(back_codes+2)); int fd = open(argv[1],O_RDONLY);
size_t res;
int i=0;
while(1)
{
bzero(back_codes,4);
bzero(buf,sizeof(buf));
short *bc=(short*)buf;
*bc = htons(3);
short *bb=(short*)(buf+2);
i++;
*bb =htons(i);
res = read(fd,buf+4,512);
send(ucfd,buf,sizeof(buf),0);
recv(ucfd,back_codes,sizeof(back_codes),0);
make_code = ntohs(*(short*)back_codes);
c_code =ntohs(*(short*)(back_codes+2));
if(make_code!=4||c_code!=i){
printf("error\n");
break;
}
if(res<512)
{
printf("success\n");
break;
}
}
printf("%d\n",i);
close(fd);
close(ucfd);
return 0;
}
并发进程代码
main.c
#include"head.h"
void call_back(int argc){
while (waitpid(-1,NULL,WNOHANG)>0);
}
void myson(int);
int main(int argc, const char *argv[])
{
signal(17,call_back);
int sfd = socket(AF_INET,SOCK_STREAM,0);
if(sfd<0){
ERR_MSG("socket");
return -1;
}
int reuse=1;
if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
{
ERR_MSG("setsockopt");
return -1;
}
struct sockaddr_in sina;
sina.sin_family = AF_INET;
sina.sin_port =htons(PORT);
sina.sin_addr.s_addr = inet_addr(IP_ADDR);
if(bind(sfd,(struct sockaddr*)&sina,sizeof(sina))<0)
{
ERR_MSG("bind");
return -1;
}
printf("success:%d\n",__LINE__);
if(listen(sfd,99)<0)
{
perror("listen");
return -1;
}
struct sockaddr_in csin;
socklen_t len = sizeof(csin);
while (1)
{
int newfd=accept(sfd,(struct sockaddr *)&csin,&len);
if(0==fork())
{
close(sfd);
myson(newfd);
exit(0);
}
close(newfd);
}
if(close(sfd)<0)
{
perror("close");
return -1;
}
return 0;
}
void myson(int newfd){
char buf[128]="";
ssize_t res,resa;
while (1)
{
bzero(buf,sizeof(buf));
res=recv(newfd,buf,sizeof(buf),0);
if(res>0){
printf("%s\n",buf);
resa = send(newfd,buf,sizeof(buf),0);
if(resa<0)
{
printf("send erro\n");
break;
}else if(resa==0)
{
printf("close\n");
break;
}
}else if(res<0)
{
ERR_MSG("recv");
break;
}else{
printf("dui duan guan bi\n");
break;
}
}
if(close(newfd)<0)
{
perror("newfd");
}
}
并发线程代码
main.c
#include"head.h"
void* myson(void*);
int main(int argc, const char *argv[])
{
int sfd = socket(AF_INET,SOCK_STREAM,0);
if(sfd<0){
ERR_MSG("socket");
return -1;
}
int reuse=1;
if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
{
ERR_MSG("setsockopt");
return -1;
}
struct sockaddr_in sina;
sina.sin_family = AF_INET;
sina.sin_port =htons(PORT);
sina.sin_addr.s_addr = inet_addr(IP_ADDR);
if(bind(sfd,(struct sockaddr*)&sina,sizeof(sina))<0)
{
ERR_MSG("bind");
return -1;
}
printf("success:%d\n",__LINE__);
if(listen(sfd,99)<0)
{
perror("listen");
return -1;
}
struct sockaddr_in csin;
socklen_t len = sizeof(csin);
int newfd;
pthread_t pid;
while(1){
newfd=accept(sfd,(struct sockaddr *)&csin,&len);
if(pthread_create(&pid,NULL,myson,&newfd)<0)
{
perror("create");
continue;
}
pthread_detach(pid);
}
if(close(sfd)<0)
{
perror("close");
return -1;
}
return 0;
}
void* myson(void*agrc){
int newfd=*(int*)agrc;
char buf[128]="";
size_t res,resa;
while (1)
{
bzero(buf,sizeof(buf));
res=recvfrom(newfd,buf,sizeof(buf),0,NULL,NULL);
if(res>0){
printf("%s\n",buf);
resa = send(newfd,buf,sizeof(buf),0);
if(resa<0)
{
printf("send erro\n");
break;
}else if(resa==0)
{
printf("close\n");
break;
}
}else if(res<0)
{
ERR_MSG("recv");
break;
}else{
printf("dui duan guan bi\n");
break;
}
}
if(close(newfd)<0)
{
perror("newfd");
}
pthread_exit(NULL);
}