np
Comments
Content
//message queues Server #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> #include <string.h> #define MSGSZ 128 /* * * Declare the message structure. * */ typedef struct msgbuf { long mtype; char mtext[MSGSZ]; } message_buf; main() { int msqid; int msgflg = IPC_CREAT 0666; key_t key; message_buf sbuf; size_t buf_length; /* * * Get the message queue id for the * * "name" 1234, which was created by * * the server. * */ key = 1234; (void) fprintf(stderr, "\nmsgget: Calling msgget(%#lx,\ %#o)\n", key, msgflg); if ((msqid = msgget(key, msgflg )) < 0) { perror("msgget"); exit(1); } else (void) fprintf(stderr,"msgget: msgget succeeded: msqid = %d\n", msqid); /* * * We'll send message type 1 * */ sbuf.mtype = 1; (void) fprintf(stderr,"msgget: msgget succeeded: msqid = %d\n", msqid); (void) strcpy(sbuf.mtext, "Did you get this?"); (void) fprintf(stderr,"msgget: msgget succeeded: msqid = %d\n", msqid); buf_length = strlen(sbuf.mtext) + 1 ; /* * * Send a message. * */ if (msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) < 0) { printf ("%d, %d, %s, %d\n", msqid, sbuf.mtype, sbuf.mtext, buf_length); perror("msgsnd"); exit(1); } else printf("Message: \"%s\" Sent\n", sbuf.mtext); exit(0); }
//message queues Client # include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> #define MSGSZ 128 /* * * Declare the message structure. * */ typedef struct msgbuf { long mtype; char mtext[MSGSZ]; } message_buf; main() { int msqid; key_t key; message_buf rbuf; /* * * Get the message queue id for the * * "name" 1234, which was created by * * the server. * */ key = 1234; if ((msqid = msgget(key, 0666)) < 0) { perror("msgget"); exit(1); } /* * * Receive an answer of message type 1. * */ if (msgrcv(msqid, &rbuf, MSGSZ, 1, 0) < 0) { perror("msgrcv"); exit(1); } /* * * * Print the answer. */ printf("%s\n", rbuf.mtext); exit(0);
} OUTPUT:: @server: msgget: Calling msgget(0x4d2,01666) msgget: msgget succeeded: msqid = 0 msgget: msgget succeeded: msqid = 0 msgget: msgget succeeded: msqid = 0 Message: "Did you get this?" Sent @client Did you get this? SEMAPHORES:: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <unistd.h> #include <string.h>
#include <errno.h> int main(void) { pid_t pid; int *shared; /* pointer to the shm */ int shmid; shmid = shmget(IPC_PRIVATE, sizeof(int), IPC_CREAT 0666); printf("Shared Memory ID=%d",shmid); if (fork() == 0) { /* Child */ /* Attach to shared memory and print the pointer */ shared = shmat(shmid, (void *) 0, 0); printf("Child pointer %u\n", shared); *shared=1; printf("Child value=%d\n", *shared); sleep(2); printf("Child value=%d\n", *shared); } else { /* Parent */ /* Attach to shared memory and print the pointer */ shared = shmat(shmid, (void *) 0, 0); printf("Parent pointer %u\n", shared); printf("Parent value=%d\n", *shared); sleep(1); *shared=42; printf("Parent value=%d\n", *shared); sleep(5); shmctl(shmid, IPC_RMID, 0); } return 0; } OUTPUT:: Shared Memory ID=753679Parent pointer 3078733824 Parent value=0 Shared Memory ID=753679Child pointer 3078733824 Child value=1 Parent value=42 Child value=42 //UDPServer #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<netinet/in.h> #include<stdlib.h> #include<errno.h> #include<string.h> int main() { int dt,sd,len; char msg[1000],sn[1000]; struct sockaddr_in serv,client; if((sd=socket(AF_INET,SOCK_DGRAM,0))<0) { perror("Socket Creation Error"); exit(1); } bzero((char *)&serv,sizeof(serv)); serv.sin_family=AF_INET; serv.sin_port=htons(5000); serv.sin_addr.s_addr=inet_addr("127.0.0.1");
if(bind(sd,(struct sockaddr *)&serv,sizeof(serv))<0) { perror("Binding Error"); exit(1); } len=sizeof(struct sockaddr); while(1) { dt=recvfrom(sd,msg,sizeof(msg),0,(struct sockaddr *)&client,&len ); printf("UDP:Client : %s\n",msg); printf("UDP:Server : "); scanf("%s",sn); dt=sendto(sd,sn,strlen(sn),0,(struct sockaddr *)&client,sizeof(c lient)); } close(serv); }
//UDPClient #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<netinet/in.h> #include<stdlib.h> #include<errno.h> #include<string.h> int main() { int dt,sd,len; char msg[1000],sn[1000]; struct sockaddr_in serv,client; if((sd=socket(AF_INET,SOCK_DGRAM,0))<0) { perror("Socket Creation Error"); exit(1); } bzero((char *)&serv,sizeof(serv)); serv.sin_family=AF_INET; serv.sin_port=htons(5000); serv.sin_addr.s_addr=inet_addr("127.0.0.1"); len=sizeof(struct sockaddr); while(1) {
printf("UDP:Client : "); scanf("%s",msg); dt=sendto(sd,msg,strlen(msg),0,(struct sockaddr *)&serv,sizeof(s erv)); dt=recvfrom(sd,sn,sizeof(sn),0,(struct sockaddr *)&serv,&len); printf("UDP:Server : %s\n",sn); } close(serv); } output: @SERVER:: $ gcc UDPServer.c c $./a.out /*waiting for client*/ UDP:Client : hello UDP:Client : hello UDP:Server : bbye e UDP:Client :(cursor waiting) ctrl c to quit @CLIENT: $ gcc UDPClient. $./a.out
UDP:Server : bby
FIFO #include<stdio.h> #include<string.h> #include<sys/types.h> #include<fcntl.h> #include<unistd.h> #include<sys/stat.h> #define FIFO_NAME "american" main() { char s[300]; int num,fd; char *filename="test.c"; mknod(FIFO_NAME,S_IFIFO 0666,0); printf("Waiting for readers......\n"); fd=open("filename",O_WRONLY O_CREAT O_TRUNC); if(fd==-1) { perror("File Not created"); exit(0); } else printf ("File created with name %s",filename); printf(" Now We can read\n"); printf("enter some text:"); while(scanf("%s",s)!=feof(stdin)) { if((num=write(fd,s,strlen(s)))==-1)
perror("It is not Write"); else printf("\n Wrote %d bytes \n",num); } } OUTPUT:: Waiting for readers... File created with name test.c Now we can read Hi Wrote 2 bytes PIPES:: #include<stdio.h> #include<stdlib.h> #include<unistd.h> /*function to handle child process work*/ void do_child(int data_pipe[]) { int c; int rc; close(data_pipe[1]); printf("\nThe data is:"); while((rc=read(data_pipe[0],&c,1))>0) { putchar(c); } exit(0); } void do_parent(int data_pipe[]) { int c; int rc; close(data_pipe[0]); printf("Enter data:"); while((c=getchar())>0) { rc=write(data_pipe[1],&c,1); if(rc==-1) { perror("Parent:write failed"); close(data_pipe[1]); exit(1); } } close(data_pipe[1]); exit(0); } main() { int data_pipe[2]; int pid; int rc; rc=pipe(data_pipe); if(rc==-1) { perror("pipe error"); exit(1); }
pid=fork(); switch(pid) { case -1:perror("Fork failed"); exit(1); case 0:do_child(data_pipe); break; default:do_parent(data_pipe); } } OUTPUT:: Enter data: this is using pipes The data is:this is using pipes /* Program For Connection Oriented Echo Server */ /* *************** coes.c ***************** */ #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<errno.h> #include<arpa/inet.h> #include<string.h> #include<stdlib.h> int main(int argc,char *argv[]) { char msg[100]; int sfd,nsfd,i; struct sockaddr_in server; if((sfd=socket(AF_INET,SOCK_STREAM,0))<0) { perror("Scoket error"); exit(1); } bzero((char*)&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(5000); server.sin_addr.s_addr=htonl(0L); if(bind(sfd,(struct sockaddr *)&server,sizeof(server))<0) { perror("bind error..."); exit(1); } if(listen(sfd,5)<0) { perror("listen error.."); exit(1); } if((nsfd=accept(sfd,0,0))<0)
{ perror("accept error"); exit(1); } i=read(nsfd,msg,sizeof(msg)); msg[i-1]='\0'; printf("Client Mesage : %s\n",msg); write(nsfd,msg,i); close(sfd); return(0); } /*Program For Connection Oriented Echo Client*/ #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<errno.h> #include<stdlib.h> #include<string.h> int main(int agrc,char *argv[]) { char to[80],from[80]; int sfd,i,j; struct sockaddr_in server; if ((sfd=socket(AF_INET,SOCK_STREAM,0))<0) { perror("socket error..."); exit(1); } bzero((char*)&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(5000); server.sin_addr.s_addr=inet_addr("127.0.0.1"); if(connect(sfd,(struct sockaddr *)&server,sizeof(server))<0) { perror("connect error.."); exit(1); } write(0,"Enter message : ",sizeof("Enter message : ")); i=read(0,to,sizeof(to)); to[i-1]='\0'; j=write(sfd,to,i); i=read(sfd,from,sizeof(from)); from[i-1]='\0'; printf("Server Message : %s\n",from); close(sfd); }
Output:: client server $ gcc coes.c $./a.out $gcc coec.c $ ./a.out Enter message:hi
Client message:hi
/* program for connection oriented File server */ #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<string.h> #include<errno.h> #include<stdlib.h> #include<stdio.h> main() { char filename[20]; char buf[80]; int sfd,nsfd,i; FILE *fp; struct sockaddr_in server; if((sfd=socket(AF_INET,SOCK_STREAM,0))<0) { perror("socket error.."); exit(1); } bzero((char *)&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(5555); server.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sfd,(struct sockaddr *)&server,sizeof(server))<0) { perror("bind error.."); exit(1); } if(listen(sfd,5)<0) { perror("listen error.."); exit(1); } if((nsfd=accept(sfd,0,0))<0) { perror("accept error.."); exit(1); } i=read(nsfd,filename,sizeof(filename)); filename[i-1]='\0'; if(!(fp=fopen(filename,"r"))) { write(nsfd,"File error",sizeof("File error")); } else { while(fgets(buf,79,fp))
{ i=strlen(buf); buf[i]='\0'; write(nsfd,buf,i); } } close(sfd); } /*program for connection oriented file client*/ #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<string.h> #include<errno.h> #include<stdlib.h> #include<stdio.h> main() { char filename[20],from[100]; int sfd,i,j,cmp; struct sockaddr_in server; if((sfd=socket(AF_INET,SOCK_STREAM,0))<0) { perror("socket error.."); exit(1); } bzero((char *)&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(5555); server.sin_addr.s_addr=inet_addr("127.0.0.1"); if(connect(sfd,(struct sockaddr *)&server,sizeof(server))<0) { perror("connect error.."); exit(1); } write(1,"Enter filename:",sizeof("Enter filename:")); i=read(0,filename,sizeof(filename)); filename[i-1]='\0'; write(sfd,filename,i); while((j=read(sfd,from,sizeof(from)))) { from[j-1]='\0'; write(1,from,j); } close(sfd); return 0; }
OUTPUT:: client server $ gcc fileserver.c
$./a.out $gcc fileclient.c $ ./a.out Enter filename:test This is a test file /* tcpserver.c */ #include #include #include #include #include #include #include #include #include <sys/types.h> <sys/socket.h> <netinet/in.h> <arpa/inet.h> <stdio.h> <stdlib.h> <unistd.h> <errno.h> <string.h>
/*waiting for client*/
int main() { int sock, connected, bytes_recieved , true = 1; char send_data [1024] , recv_data[1024]; struct sockaddr_in server_addr,client_addr; int sin_size; if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("Socket"); exit(1); } if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) =-1) { perror("Setsockopt"); exit(1); } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(5000); server_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(server_addr.sin_zero),8); if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { perror("Unable to bind"); exit(1); } if (listen(sock, 5) == -1) { perror("Listen"); exit(1); } printf("\nTCPServer Waiting for client on port 5000"); fflush(stdout); while(1) {
sin_size = sizeof(struct sockaddr_in); connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size); printf("\n I got a connection from (%s , %d)", inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port)); while (1) { printf("\n SEND (q or Q to quit) : "); scanf("%s",&send_data); if (strcmp(send_data , "q") == 0 strcmp(send_data , "Q") == 0) { send(connected, send_data,strlen(send_data), 0); close(connected); break; } else send(connected, send_data,strlen(send_data), 0); bytes_recieved = recv(connected,recv_data,1024,0); recv_data[bytes_recieved] = '\0'; if (strcmp(recv_data , "q") == 0 { close(connected); break; } strcmp(recv_data , "Q") == 0)
else printf("\n RECIEVED DATA = %s " , recv_data); fflush(stdout); } } close(sock); return 0; }
/* tcpclient.c */ #include #include #include #include #include #include #include #include #include <sys/socket.h> <sys/types.h> <netinet/in.h> <netdb.h> <stdio.h> <string.h> <stdlib.h> <unistd.h> <errno.h>
int main()
{ int sock, bytes_recieved; char send_data[1024],recv_data[1024]; struct hostent *host; struct sockaddr_in server_addr; host = gethostbyname("127.0.0.1"); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("Socket"); exit(1); } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(5000); server_addr.sin_addr = *((struct in_addr *)host->h_addr); bzero(&(server_addr.sin_zero),8); if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { perror("Connect"); exit(1); } while(1) { bytes_recieved=recv(sock,recv_data,1024,0); recv_data[bytes_recieved] = '\0'; if (strcmp(recv_data , "q") == 0 { close(sock); break; } strcmp(recv_data , "Q") == 0)
else printf("\nRecieved data = %s " , recv_data); printf("\nSEND (q or Q to quit) : "); scanf("%s",&send_data); if (strcmp(send_data , "q") != 0 && strcmp(send_data , "Q") != 0) send(sock,send_data,strlen(send_data), 0); else { send(sock,send_data,strlen(send_data), 0); close(sock); break; } } return 0; }
OUTPUT:: client server $ gcc tcpserver.c $./a.out $gcc tcpclient.c /*waiting for client*/ $ ./a.out I got a connection from 192.168.100.101 SEND(q or Q to quit): hi Received data:hi SEND(q or Q to quit):how_are_you Received data:how_are_you SEND(q or Q to quit):
Sponsor Documents