#include <myinclude.h>
int main(int argc, const char *argv[])
{
//1.创建套接字文件
int cfd=socket(AF_INET,SOCK_DGRAM,0);
if(cfd==-1){
perror("socket");
return -1;
}
printf("socket success\n");
//2.绑定IP/端口号
struct sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(8888);
sin.sin_addr.s_addr=inet_addr("192.168.125.167");
if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){
perror("bind");
return -1;
}
printf("bind success\n");
//3.数据交互
struct sockaddr_in rin;
rin.sin_family=AF_INET;
rin.sin_port=htons(69);
rin.sin_addr.s_addr=inet_addr("192.168.125.223");
char rbuf[516]=" ";
int n;
// while(1){
char filename[20];
printf("please enter a filename: ");
fgets(filename,sizeof(filename),stdin);
filename[strlen(filename)-1]='\0';
// while(getchar()!=10);
printf("1:下载\n");
printf("2:上传\n");
printf("3:退出\n");
scanf("%d",&n);
//请求读写
short* p1=rbuf;
*p1=htons(n);
char* p2=rbuf+2;
strcpy(p2,filename);
char*p3=p2+strlen(p2)+1;
strcpy(p3,"octet");
int size=4+strlen(p2)+strlen(p3);
struct sockaddr_in cin;
socklen_t cinlen=sizeof(cin);
//
switch(n){
case 1:{
int wfd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0666);
sendto(cfd,rbuf,size,0,(struct sockaddr*)&rin,sizeof(rin));
while(1){
recvfrom(cfd,rbuf,516,0,(struct sockaddr*)&cin,&cinlen);
write(wfd,rbuf+4,sizeof(rbuf)-4);
short* p1=rbuf;
*p1=4;
int size=4;
sendto(cfd,rbuf,size,0,(struct sockaddr*)&cin,cinlen);
if(strlen(rbuf)<516){break;}
}
close(wfd);
break;
}
case 2:{
int rfd=open(filename,O_RDONLY);
sendto(cfd,rbuf,size,0,(struct sockaddr*)&rin,sizeof(rin));
while(1){
recvfrom(cfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&cinlen);
short* p1=rbuf;
*p1=3;
char* p2=rbuf+2;
*p2=1;
char* p3=rbuf+4;
read(rfd,p3,sizeof(rbuf)-4);
sendto(cfd,rbuf,strlen(rbuf),0,\
(struct sockaddr*)&cin,cinlen);
if(strlen(rbuf)<516){break;}
}
close(rfd);
break;
}
case 3: exit(EXIT_SUCCESS);
break;
}
// }
//4.关闭套接字文件
close(cfd);
return 0;
}
多进程实现TCP并发服务器
多线程实现TCP并发服务器
域套接字TCP实现主机内通信
域套接字UDP实现主机内通信