现在的位置: 首页 > 综合 > 正文

我的makefile写法(一)

2019年08月11日 ⁄ 综合 ⁄ 共 2609字 ⁄ 字号 评论关闭

 程序演示了一个通过tcp/ip通讯的server/client程序,都是简单的C程序。源码:

server.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#include<string.h>

int readline(int fd, void *pbuf, int maxlen);

int main(int argc,char **argv)
{
	int fd,client_sockfd;
	int len;
	int ret;
	struct sockaddr_in remoteaddr;
	struct sockaddr_in localaddr;
	char buf[1024];
	
	//
	// 建立套接口
	//   
	fd = socket(AF_INET, SOCK_STREAM, 0);
	if(fd == -1)
	{
		printf("socket() error %d\n",errno);
		return -1;
	}
    
	//
	// 绑定地址和端口
	//
	localaddr.sin_family = AF_INET;
	localaddr.sin_addr.s_addr = htonl(INADDR_ANY);  
	localaddr.sin_port = htons(5000);  
	len = sizeof(localaddr);  
    
	if(bind(fd, (struct sockaddr *)&localaddr, len) == -1)
	{
		printf("bind() error\n");
		return -1;
	}
    
	//
	// 建立套接口队列
	//
	if(listen(fd, 5) == -1)
	{
		printf("listen() error\n");
		return -1;
	}
	
	//
	// 等待  
	//  
	len = sizeof(remoteaddr);   	
    
	printf("server recieve connect!--\n");
	int i = 0;
	while(1)
	{
		printf("\nWaiting for ...\n");
//		fflush(stdout);
		
		client_sockfd = accept(fd,(struct sockaddr *)&remoteaddr, &len);
		//  
		// 接收数据
		//
		ret = recv(client_sockfd, (void *)buf, 1024, 0);
		if(ret <= 0)
		{
			printf("server recieve data failed!--\n");
		}  
		else
		{
			printf("server read line:%s\n", buf);  
		}
		
		memset(buf,0x00,sizeof(buf));
	//	strcpy(buf,"How are you?");
		sprintf(buf, "%d: How are you?", ++i);
		sleep(3);
		
		ret = send(client_sockfd, (void *)buf, strlen(buf),0);
		if(ret <= 0)
		{
			printf("server send() error\n");
		}
		memset(buf,0x00,sizeof(buf));
		//关闭联接   
		close(client_sockfd);
		printf("close client\n");   
	}
	
	return 0;
}

 

client.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
	int fd;
	int len,ret;
	struct sockaddr_in remoteaddr;
	char data[1024];
	int times = 1;
	
	//
	// 建立套接口
	//  
	fd = socket(AF_INET, SOCK_STREAM, 0);
	
	//
	// 连接
	//
	remoteaddr.sin_family = AF_INET;
	remoteaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	remoteaddr.sin_port = htons(5000);
	len = sizeof(remoteaddr);
	
	ret = connect(fd, (struct sockaddr *)&remoteaddr, len);
	if(ret == -1)  
	{
		printf("connect() error\n");
		return -1;
	}
    
	//while(1)
	{
		//发送数据
		printf("The %d times run\n", times++);
		sprintf(data,"%s","hello world");
		ret = send(fd, (void *)data, strlen(data),0);
		if(ret <= 0)
		{
			printf("send() error\n");
		}
		
		printf("sent line:%s\n", data);
		
		bzero(data,1024);
		sleep(1);
		ret = recv(fd, (void *)data, 1024, 0);
		if(ret <= 0)
		{
			printf("server recieve data failed!--\n");
		}  
		else
		{
			int id = atoi(data);
			printf("client[id=%d] read str:[%s]\n", id, data);
		}
	}
    
	printf("client exited.\n");
	
	//
	// 关闭
	//
finish:  
	close(fd);
	fd = -1;
	return 0;
}

 

再挂上我的Makefile:

install: myserver myclient

myserver: server.o
	gcc -o myserver server.o

#server.o: server.c

myclient: client.o
	gcc -o myclient client.o

#client.o: client.c

clean:
	rm -f *.o my*

 

挂上我的这个makefile,主要是为了说明:

1. 我这个文件相互之间没有依赖性。

2. server.o依赖于server.c,所以这个依赖规则在makefile文件中可以不写,它默认已经存在的。

抱歉!评论已关闭.