📄 clientfork.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 + -