LINUX下,编程自学三:多进程C/S

service

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


#define PORT 1234
#define LISTENNUM	20
#define MAXSIZE		1000

int main()
{
	int listenfd;
	int connfd;
	struct sockaddr_in	server;
	struct sockaddr_in	client;

creat_sock:
	listenfd = socket(AF_INET,SOCK_STREAM,0);
	if(listenfd < 0)
	{
		perror("socket");
		return -1;
	}

	int opt = SO_REUSEADDR;
	setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));

	bzero(&server,sizeof(server));
	server.sin_family = AF_INET;
	server.sin_port = htons(PORT);
	server.sin_addr.s_addr = htonl(INADDR_ANY);
	if(bind(listenfd,(struct sockaddr *)&server,sizeof(server)) < 0)
	{
		perror("bind");
		close(listenfd);
		return -1;
	}
	
	if(listen(listenfd,LISTENNUM) < 0)		
	{
		perror("listen");
		close(listenfd);
		return -1;
	}
	int len;
	int num;
	pid_t 	pid;	
	char 	buffer[MAXSIZE];	
	len = sizeof(client);	

	while(1)
	{
		connfd = accept(listenfd,(struct sockaddr *)&client,&len);
		if(connfd < 0)
		{
			perror("accept");
			close(listenfd);
			goto creat_sock;
		}
	
		pid = fork();
		if(pid < 0)
		{
			perror("fork");
			close(connfd);
			close(listenfd);
			exit(-1);
		}
		if(pid > 0)
		{
			close(connfd);
			close(listenfd);
			exit(-1);
		}
		
		printf("client connect Ip :%s\n",inet_ntoa(client.sin_addr));

		num = recv(connfd,buffer,256,0);
		if(num < 0)
		{
			perror("recv");
			close(connfd);
			close(listenfd);
			exit(-1);	
		}

		printf("buffer = %s\n",buffer);
		
		
	close(connfd);
	close(listenfd);
	goto creat_sock;
	}

	return 0;
}

client.c(比较简单与随意)

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

#define	PORT	1234

int main()
{
	struct sockaddr_in	server;
	
	int connfd;

	connfd = socket(AF_INET,SOCK_STREAM,0);

	bzero(&server,sizeof(server));
	server.sin_family = AF_INET;
	server.sin_port	= htons(PORT);
	server.sin_addr.s_addr = inet_addr("127.0.0.1");
	connect(connfd,(struct sockaddr *)&server,sizeof(server));

	send(connfd,"client connect 1-9",64,0);

	close(connfd);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值