⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientfork.c

📁 这是一个MINITGUI2。0的应用程序
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/msg.h>#include <sys/ipc.h>#include<unistd.h>#include<sys/socket.h>   #include<netinet/in.h> #include<netdb.h>//#include "ofile.c"//#include <message.h> //extern int clientfork();#define MAXDATA 1024int sockfd;int sendstatus;int msqid ;//char buffer1[MAXDATA];//char *str;char * file="/usr/local/etc/ipconfig";int SockConnect(int argc){		struct sockaddr_in server_addr;	struct hostent *host;	int fd;	int num;	char *f = "f";      //文件没有打开	int i = 1, j = 0;	char buf[26];	char ipbuf[20];	char portbuf[5];	//int fileok;	int portnumber;	char *ip,*port;		if((fd = open(file, O_RDONLY, 0)) < 0){		printf("can't open file\n");		if(msgsnd(msqid, f, 1,0) == -1){             //文件没有打开			printf("message send err\n");		}		else{			//printf ("message already send hehe\n");		}		sleep(2);			//perror("open");			return 1;	}	else{		printf("\nopen the %s successful\n",file);	}		num = read(fd,buf,26);	if(num < 0){		printf("read err\n");		return 2;	}	printf("read ok the data is %s",buf);	while(buf[i]!='"'){				ipbuf[i-1] = buf[i];		i++;			}	ipbuf[i-1] = '\0';	printf("\nlbub = %s",ipbuf);	ip = ipbuf;	printf ("\nthe ip is %s\n",ip);	i = 0;	while(buf[i++] != '*') ;	for(j = 0;j<4;j++){		portbuf[j] = buf[i++];	}	portbuf[j] = '\0';	printf("\nportbuf = %s",portbuf);	port = portbuf;	printf("\nthe relport is %s\n",port);		close(fd);       /* if(argc!=3)	{		fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);		exit(1);220.187.26.202   210.46.97.100	}*//*	fileok = getipport(ip,port);	printf("\n want to config ip\n");	printf("\naaaaaaaaaa\n");	printf("\n\nthe relip is %s the port is %s",ip,port);*/	if((host=gethostbyname(ip))==NULL)	{		fprintf(stderr,"Get hostname error\n");		return 1;	}	if((portnumber=atoi(port))<0)	{		//fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);		return 1;	}	/***Create Socket***/	if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)	{		fprintf(stderr,"ErrorNumber:1--Socket Error:%s\a\n",strerror(errno));		return 2;	}	/***Setting***/	bzero(&server_addr,sizeof(server_addr));	server_addr.sin_family=AF_INET;	server_addr.sin_port=htons(portnumber);	server_addr.sin_addr=*((struct in_addr *)host->h_addr);	if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1){	 fprintf(stderr,"ErrorNumber:2--Connect Error:%s\a\n",strerror(errno));		return 3;	}	return 0;}void SockReceiveMessage(void)	{  int recvbytes;	   char bufRecv[MAXDATA];	   //char buffer1[MAXDATA];	   //pthread_t thread1;	  printf("Receiving Message is starting.Please wait...\n");	 if((recvbytes=recv(sockfd,bufRecv,sizeof(bufRecv),0))==-1)	{	 fprintf(stderr,"ErrorNumber:4--Receive Error:%s\n",strerror(errno));	 //exit(1);	}	else	printf("Receiving Message is finished!\n");	bufRecv[recvbytes]='\0';	printf("I have received:\n%s\n",bufRecv);	memset(bufRecv,0,sizeof(bufRecv));	//pthread_join(thread1,NULL);	}void SockSendMessage(char *p)	{	int len;	char bufSend[MAXDATA];	strcpy(bufSend,p);	//char *msg = "begin,td,00001,12345678+20+14.5+2007-05-12 10:35:01,end";		printf("Send Message is starting.Please wait...\n");	len=strlen(bufSend);	if((sendstatus=send(sockfd,bufSend,len,0))==-1)	{		//perror("Send Error");		fprintf(stderr,"ErrorNumber:3--SendError.\n",strerror(errno));		//exit(1);	}		else	printf("Send Message successlly!\n");	//exit(0);	memset(bufSend,0,sizeof(bufSend));	//pthread_join(thread2,NULL);	}void closesocket(void){	close(sockfd);	}static int creattwopipe(void){	if(pipe(client_sendpipe) == -1){                   //主进程与SOCKET进程发送数据管道,		printf("open pipe error\n");				return -1;	}	if(pipe(client_recipipe) == -1){		printf("open pipe error\n");		//主进程与SOCKET进程接受数据管道,		return -1;	}	return 0;}//static char c[45];              //主进程与SOCKET进程发送数据管道,数据缓冲区int clientfork(void ){	pid_t pid = 0;    	if ((pid = fork ()) > 0) {        	fprintf (stderr, "new child, pid: %d.\n", pid);    	}    	else if (pid == 0) {		int ok;/*-------------------------clientfork---------------------------*/        			char *p = "c";		char *s = "s";		char *r = "r";		char *x = "x";		char *cn = "n";       //连接不成功		//int len ;		char c[45];		//fd_set rds;		if((msqid = msgget(clientmesqidkey,0666)) == -1){			printf("Server is not running\n");			exit (1);		}		else{			printf("\nServer message gueue is nonect i open it hehe\n");		}		while(1){			//int len ;			//char c[45]			//sleep(1);re:			printf("in clientfork.c while\n");			if(msgsnd(msqid, x, 1,0) == -1){				printf("message send err\n");			}			else{				//printf ("message already send hehe\n");			}			read(client_sendpipe[0],c,50);			printf ("\nin clientfork the buf is %s\n",c);			printf("now in clientfork begain to connet ");			ok = SockConnect(1);			if(ok != 0){				printf("\nconnet err\n");				if(msgsnd(msqid, cn, 1,0) == -1){             //连接不成功					printf("message send err\n");				}				else{				//printf ("message already send hehe\n");				}				sleep(2);				goto re;			}			if(msgsnd(msqid, p, 1,0) == -1){             //发送lianjie成功消息				printf("message send err\n");			}			else{				//printf ("message already send hehe\n");			}			sleep(2);			printf("\ni want to send message\n");			SockSendMessage(c);			if(msgsnd(msqid, s, 1,0) == -1){             //发送发送成功消息				printf("message send err\n");			}			else{				//printf ("message already send hehe\n");			}						printf("\nnow i want to receive message\n");			sleep(2);			SockReceiveMessage();			if(msgsnd(msqid, r, 1,0) == -1){             //发送接受成功消息				printf("message send err\n");			}			else{				//printf ("message already send hehe\n");			}			sleep(2);			printf("\n i want to closesocket\n");			closesocket();								}        	return 0;    	}/*****************************************************************/    	else {        	perror ("fork");    	}    	return pid;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -