socket programming using udp for chat application


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers socket programming using udp for chat application
# 1  
Old 12-05-2008
socket programming using udp for chat application

hi,
i have a source code for 1 server and 2 clients ...but the clients are not able to send data..1 server only receives data from clients and forwards to any other client, the data is in the buffer.....please help... thank you in advance.....

/**********client1***************/
Code:
// Here Data sending order goes like this.
// First Client 1 then client 2 has to send data to server for recognization.
// Then Client 2 has to start conversation then client1 , client2... 
// in this order data has to be sent
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define MAXSIZE 25

main()
{

	struct sockaddr_in c_addr, s1_addr;
	int sockfd, rval, addr_len;
	char buff[MAXSIZE];

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if (sockfd == -1)
	   printf("Error while socket creation");
	
	s1_addr.sin_family = AF_INET;
	s1_addr.sin_port = htons(7035);
	s1_addr.sin_addr.s_addr = inet_addr("127.0.0.1") ;
        
	gets(buff);
	
	rval = sendto(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&s1_addr, sizeof(s1_addr) );
	if (rval == -1)
	{   printf("While sending problem");close(sockfd);

        } 

	while(1)
	{  //printf("from Client 1");

	

	

	addr_len = sizeof(s1_addr);
  	rval = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&s1_addr, &addr_len );
	if (rval == -1)
	{   printf("While receving  problem");close(sockfd);}
	else
	   { puts("from server received  "); 
	     puts(buff);  }

	gets(buff);
	
	rval = sendto(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&s1_addr, sizeof(s1_addr) );
	if (rval == -1)
	{   printf("While sending problem");close(sockfd);

        } 	
	
        } // while end 

  close(sockfd);
}


/******************client2****************/
Code:
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define MAXSIZE 25

main()
{

	struct sockaddr_in c_addr, s1_addr;
	int sockfd, rval, addr_len;
	char buff[MAXSIZE];

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if (sockfd == -1)
	   printf("Error while socket creation");
	
	s1_addr.sin_family = AF_INET;
	s1_addr.sin_port = htons(7035);
	s1_addr.sin_addr.s_addr = inet_addr("127.0.0.1") ;

	gets(buff);
	
	rval = sendto(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&s1_addr, sizeof(s1_addr) );
	if (rval == -1)
	{   printf("While sending problem");close(sockfd);

        } 

	while(1)
	{  //printf("from Client 2");

	

	gets(buff);
	
	rval = sendto(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&s1_addr, sizeof(s1_addr) );
	if (rval == -1)
	{   printf("While sending problem");close(sockfd);

        } 

	addr_len = sizeof(s1_addr);
  	rval = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&s1_addr, &addr_len );
	if (rval == -1)
	{   printf("While receving  problem");close(sockfd);}
	else
	   { puts("from server received  "); 
	     puts(buff);  }	
	
        } // while end 

  close(sockfd);
}

/**************server****************/
Code:
// Here Data sending order goes like this.
// First Client 1 then client 2 has to send data to server for recognization.
// Then Client 2 has to start conversation then client1 , client2... 
// in this order data has to be sent.


#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define MAXSIZE 25


main()
{

    struct sockaddr_in ss_addr, c_addr,c1_addr, c2_addr ;
    int sockfd, rval, addr_len, addr_len1;
    char buff[MAXSIZE], buff1[MAXSIZE]; 

    sockfd = socket(AF_INET, SOCK_DGRAM, 0); 
    if (sockfd == -1 )
	printf("socket(logical port) creation error");  	
    //printf("bef");		 	
    ss_addr.sin_family = AF_INET;
    ss_addr.sin_port = htons(7035);
    ss_addr.sin_addr.s_addr = htonl(INADDR_ANY);	   	
     
    rval = bind(sockfd, (struct sockaddr*) &ss_addr, sizeof(ss_addr)  );
    //printf("hHHHH");
    if (rval == -1)
	{ printf( "Binding error");close(sockfd);}
    else 
 	{
              // printf("in else");
               addr_len = sizeof(c_addr);
               addr_len1 = sizeof(c1_addr);
    rval = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr*)&c_addr, &addr_len );
	
    if (rval == -1)
        printf("while recving from 1st problem.");

    puts(buff);

    rval = recvfrom(sockfd, buff1, sizeof(buff1), 0, (struct sockaddr*)&c1_addr, &addr_len1 );	
    puts(buff1);

    while(1)
    {	
   
     // For Client 2
     rval = recvfrom(sockfd, buff1, sizeof(buff1), 0, (struct sockaddr*)&c1_addr, &addr_len1 );	  
    if (rval == -1)
     {   printf("while recving from 2nd problem.");close(sockfd);}

     puts(buff1);
	
    rval = sendto(sockfd, buff1, sizeof(buff1), 0, (struct sockaddr*)&c_addr, addr_len );	
 
    if (rval == -1)
        printf("while sending from server to 1st client problem.");



  // For Client 1

 

 rval = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr*)&c_addr, &addr_len );	
    if (rval == -1)
    {    printf("while recving from 1st problem.");close(sockfd);}
     puts(buff);


 rval = sendto(sockfd, buff, sizeof(buff), 0, (struct sockaddr*)&c1_addr, addr_len1 );	

     
    if (rval == -1)
    {    printf("while sending from server to 2nd client problem.");close(sockfd);}

   if (rval == -1)
   { printf("breaking from loop ");close(sockfd);	
     break; 
   }  


  }  // while end 

 // printf("at end"); 
   // puts(buff);			
}
close(sockfd);	
}


Last edited by otheus; 02-03-2009 at 12:08 PM.. Reason: added [code] tags
# 2  
Old 02-03-2009
Hi there. I think you are confused about something. The server (as it is written) cannot distinguish between "client1" and "client2". So whichever client you start first becomes "client1". The value of c1 and of c depend on which client was talking to the server when the recvfrom() is called.

In order to do this right, I think, you have to build an array of clients, each of which you get after a call to recvfrom(). Then you write to all the clients in that array (except the one that matches the current one).
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

UDP Socket File Sharing

Hai, I am having one server/client both running in different host in UDP. How can i assure whether the data is recieved properly in client side. I am writing 250 KB in Server and client reading only 150 KB data. I am using select write in server and select read in client also.If i am putting one... (1 Reply)
Discussion started by: andrew.paul
1 Replies

2. IP Networking

How to create a multi-chat server using UDP?

Hifriends I have a doubt . how to create a multi-chat server using UDP which can run on MAC systems.. Thank u in advance (3 Replies)
Discussion started by: babbu25
3 Replies

3. Programming

socket programming using UDP connection

I want to send packets through single socket() but using two different port numbers in UDP. Anybody give some idea on this. Thanks in advance.:) (2 Replies)
Discussion started by: naresh046
2 Replies

4. Programming

help me about sending file through socket udp with c in linux

hi, i am newbie of socket. i want to ask some question. if i want to send file from client to server, how do i do? and if i want to send file from server to client, how do i do? any pro help me and if possible, you can post code for an example i need it very much thank you for helping me:)... (1 Reply)
Discussion started by: tung1984
1 Replies

5. Programming

reliable udp and socket programming

could somebody give me hand programming the attached request. my code isn't complete and i do not really understand how should i implement that. (1 Reply)
Discussion started by: makaveli_
1 Replies

6. IP Networking

UDP server socket inaddr_any - How to get the real IP

Hello ! I seem to have the same problem as in https://www.unix.com/ip-networking/91203-inaddr_any-opposite.html#post302262417 But I can't find a solution. I have a UDP server socket bound to 0.0.0.0. The server hosts the addresses IP1, IP2 and IP3. I get an incoming request to IP1. I use... (1 Reply)
Discussion started by: steinwej
1 Replies

7. UNIX for Dummies Questions & Answers

udp socket programming

Hi...Please can someone send me implementation chat application using UDP(socket programming in C). Please send me as soon as possible. Thanks in advance. (2 Replies)
Discussion started by: unsweety
2 Replies

8. Programming

socket programming (UDP with multiple clients)

Hi all, I have an application where there are 5 udp clients/senders which keep sending data to same IP with different port number can I design my udp server to recieve data from all 5 clients at the same time? how should I use the server address structure? should I use different... (3 Replies)
Discussion started by: shashi
3 Replies

9. Shell Programming and Scripting

Socket programming in bash (using /dev/udp)

Hi, I am trying to write 2 simple scripts. One to echo a message into a socket, and the other to read from it. There are many tutorials about, but they're mostly about retrieving web pages through a socket. The code I'm trying is echo qwerty > /dev/udp/localhost/22 (the first port I found that... (2 Replies)
Discussion started by: zeppelin147
2 Replies

10. Programming

ftp application using socket programming

i have made a ftp application in socket programming which uses TCP/IP .. i have the problem runing the only problem is on the client side i take the user input for the file to be downloaded from the command promt. write(s, argv, strlen(argv)+1); // this is how i write in client side argv is... (1 Reply)
Discussion started by: toughguy2handle
1 Replies
Login or Register to Ask a Question