Dear All,
Could someone help and tell me how to handle multiple send and receive operations with udp sockets? In fact here is my problem:
server.c is composing of serveral sub programs (the same for client.c)
-----server.c-------
[code=c]
............... .
int main(){
............
//create socket
if (sd = socket(PF_INET, SOCK_DGRAM, ptrp->p_proto)) {
fprintf(stderr, "socket creation failed\n");
exit(1);
}
// sockaddr structure
memset((char *)&sad, 0, sizeof(sad));
sad.sin_port = htons(port);
sad.sin_family = AF_INET;
sad.sin_addr.s_ addr = htons(INADDR_AN Y);
//bind between the socket and the address
if (bind(sd, (struct sockaddr *)&sad, sizeof(sad)) < 0) {
fprintf(stderr, "bind failed\n");
exit(1);
}
...............
sub-prog1(int sd){
...............
if (recvfrom(sd,bu ff,MAXBUF,0,(st ruct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
.........
if (sendto(sd,buff ,sizeof(buff),0 ,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
............
}
sub-prog2(int sd){
...............
if (recvfrom(sd,bu ff,MAXBUF,0,(st ruct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
.........
if (sendto(sd,buff ,sizeof(buff),0 ,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
............
}
sub-prog3(int sd){
...............
if (recvfrom(sd,bu ff,MAXBUF,0,(st ruct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
.........
if (sendto(sd,buff ,sizeof(buff),0 ,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
............
}
} // end of main
------client.c------
............
#define MAXSOCK 3
............... .
int main(){
............... .
// sockaddr structure
memset((char *)&sad, 0, sizeof(sad));
sad.sin_port = htons(port);
sad.sin_family = AF_INET;
sad.sin_addr.s_ addr = htons(INADDR_AN Y);
for (i=0;i<MAXSOCK; i++){
//create socket
if (sd[MAXSOCK] = socket(PF_INET, SOCK_DGRAM, ptrp->p_proto)) {
fprintf(stderr, "socket creation failed\n");
exit(1);
}
} // end of for
...............
sub-prog1(int sd[0]){
.........
if (sendto(sd[0],buff,sizeof(bu ff),0,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
...............
if (recvfrom(sd[0],buff,MAXBUF,0, (struct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
............
}
sub-prog2(int sd[1]){
.........
if (sendto(sd[1],buff,sizeof(bu ff),0,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
...............
if (recvfrom(sd[1],buff,MAXBUF,0, (struct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
............
}
sub-prog3(int sd[2]){
.........
if (sendto(sd[2],buff,sizeof(bu ff),0,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
...............
if (recvfrom(sd[2],buff,MAXBUF,0, (struct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
............
}
} // end of main
[/code]
--------------------------
I tried serveral ways to make it working but unfortunatly I haven't succeded yet. Could some please tell me the right way on how to make such programs working ..... thanking you in advance and any help would be appreciated.
Faithfully yours,
Azwaw
Could someone help and tell me how to handle multiple send and receive operations with udp sockets? In fact here is my problem:
server.c is composing of serveral sub programs (the same for client.c)
-----server.c-------
[code=c]
............... .
int main(){
............
//create socket
if (sd = socket(PF_INET, SOCK_DGRAM, ptrp->p_proto)) {
fprintf(stderr, "socket creation failed\n");
exit(1);
}
// sockaddr structure
memset((char *)&sad, 0, sizeof(sad));
sad.sin_port = htons(port);
sad.sin_family = AF_INET;
sad.sin_addr.s_ addr = htons(INADDR_AN Y);
//bind between the socket and the address
if (bind(sd, (struct sockaddr *)&sad, sizeof(sad)) < 0) {
fprintf(stderr, "bind failed\n");
exit(1);
}
...............
sub-prog1(int sd){
...............
if (recvfrom(sd,bu ff,MAXBUF,0,(st ruct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
.........
if (sendto(sd,buff ,sizeof(buff),0 ,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
............
}
sub-prog2(int sd){
...............
if (recvfrom(sd,bu ff,MAXBUF,0,(st ruct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
.........
if (sendto(sd,buff ,sizeof(buff),0 ,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
............
}
sub-prog3(int sd){
...............
if (recvfrom(sd,bu ff,MAXBUF,0,(st ruct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
.........
if (sendto(sd,buff ,sizeof(buff),0 ,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
............
}
} // end of main
------client.c------
............
#define MAXSOCK 3
............... .
int main(){
............... .
// sockaddr structure
memset((char *)&sad, 0, sizeof(sad));
sad.sin_port = htons(port);
sad.sin_family = AF_INET;
sad.sin_addr.s_ addr = htons(INADDR_AN Y);
for (i=0;i<MAXSOCK; i++){
//create socket
if (sd[MAXSOCK] = socket(PF_INET, SOCK_DGRAM, ptrp->p_proto)) {
fprintf(stderr, "socket creation failed\n");
exit(1);
}
} // end of for
...............
sub-prog1(int sd[0]){
.........
if (sendto(sd[0],buff,sizeof(bu ff),0,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
...............
if (recvfrom(sd[0],buff,MAXBUF,0, (struct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
............
}
sub-prog2(int sd[1]){
.........
if (sendto(sd[1],buff,sizeof(bu ff),0,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
...............
if (recvfrom(sd[1],buff,MAXBUF,0, (struct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
............
}
sub-prog3(int sd[2]){
.........
if (sendto(sd[2],buff,sizeof(bu ff),0,(struct sockaddr *) &sad,sizeof(sad )) {
perror("write data failled");
exit(1);
}
...............
if (recvfrom(sd[2],buff,MAXBUF,0, (struct sockaddr *) &sad,&fromSize) ) {
perror("read data failled");
exit(1);
}
............
}
} // end of main
[/code]
--------------------------
I tried serveral ways to make it working but unfortunatly I haven't succeded yet. Could some please tell me the right way on how to make such programs working ..... thanking you in advance and any help would be appreciated.
Faithfully yours,
Azwaw
Comment