socket 本机C/S通信

/*******************************socket_test*******************************************/

server:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


#define MAXLEN 5000
int main(int argc , char **argv)
{
	unsigned char buffer[MAXLEN]={0};
	int flag=0;

	struct sockaddr_in my_socket;
	struct sockaddr_in from_socket;
	struct timeval timo;
	fd_set readfds;

	//memset(&my_socket,0,sizeof(my_socket));
	//bzero()
	my_socket.sin_family = AF_INET;
	my_socket.sin_port = htons(8000);
	my_socket.sin_addr.s_addr= INADDR_ANY;

	int fd=socket(AF_INET,SOCK_DGRAM,0);
	if(fd<0)
	{
		printf("the socket_fd  error!\n");
		return 1;
	}
	int size_len = sizeof(struct sockaddr_in);	
	int bind_flag=bind(fd,(struct sockaddr *)&my_socket,sizeof(struct sockaddr));
	if(bind_flag ==-1)
	{
		printf("there is the bind error\n");
	}
	while(1)
	{
		FD_ZERO(&readfds);
		FD_SET(fd,&readfds);
		timo.tv_sec=5;
		timo.tv_usec=0;
		FILE *file;
		char *path="./server.c";
		switch(select(fd+1,&readfds,NULL,NULL,&timo))
		{
			case -1:
				continue;
			case 0:
				continue;
		}
		if(FD_ISSET(fd,&readfds))
		{
			recvfrom(fd,buffer,MAXLEN,0,(struct sockaddr *)&from_socket,&size_len);
			

			printf("%s\n",buffer);

			file=fopen(path,"r+");
			if(file==NULL)
			{
				printf("open fail");
			}
			else
			{
				fseek(file,0,SEEK_SET);
				memset(buffer,0,MAXLEN);
				fread(buffer,MAXLEN,1,file);
				fclose(file);
			}
			sendto(fd,buffer,sizeof(buffer),0,(struct sockaddr*)&from_socket,sizeof(from_socket));

		}
	}

	return 0;
}


client:

#include <stdio.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define MAXLEN 5000


int main(int argc,char **argv)
{
	unsigned char buffer[MAXLEN]={0};
	int sock_flag;

	struct sockaddr_in svrsocket;
	struct sockaddr_in fromsocket;
//	memset(svrsocket,0,sizeof(svrsocket));

	svrsocket.sin_family=AF_INET;
	svrsocket.sin_addr.s_addr=inet_addr("127.0.0.1");
	svrsocket.sin_port=htons(8000);

	fromsocket.sin_family=AF_INET;
	fromsocket.sin_addr.s_addr=INADDR_ANY;
	fromsocket.sin_port=htons(9000);

	
	int fd=socket(AF_INET,SOCK_DGRAM,0);
	

	FILE *file;
	char *name="client.c";
	char path[100];
	memset(path,0,100);
	sprintf(path,"%s%s","./",name);
	file = fopen(path,"r+");
	if(file == NULL)
	{
		printf("open fail %s",path);
	}
	else
	{
		fseek(file,0,SEEK_SET);
		fread(buffer,MAXLEN,1,file);
		fclose(file);
	}
	sendto(fd,buffer,MAXLEN,0,(struct sockaddr *)&svrsocket,sizeof(svrsocket));

	memset(buffer,0,MAXLEN);
	int len = sizeof(struct sockaddr_in);
	recvfrom(fd,buffer,MAXLEN,0,(struct sockaddr*)&fromsocket,&len);

		
	printf("%s\n",buffer);
	
	return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ghost丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值