2024.4.16

 

#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实现主机内通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值