kleiner P2P Messenger für die Konsole

Also, da ich persönlich nicht so auf ICQ stehe und auch nicht auf IRC ( man weiss ja nie wo die Daten landen ) hab ich einen messenger für die Konsole mit dem ich mich immer mit anderen unterhalten.
Was bei dem Programm fehlt ist noch ein Signal Handler um die Sockets zu schliessen wegen der while(1)
und noch eine erweiterung zum versenden und verschicken, wer den Code sieht wird schon wissen was ich meine :-)

Also, für jeden der etwas privatsphäre haben will, hier der recht simple Code

Server :
Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main(void)
{
  int  s;
  int  c;
  int  addr_length;
  int  bytes;
  int  i;
 
  char buffer[4096];
 
  struct sockaddr_in addr;
 
  s = socket(PF_INET,SOCK_STREAM,0);
  if(s == -1)
  {
    perror("socket() failed !\n");
    exit(0);
  }
 
  addr.sin_addr.s_addr = INADDR_ANY;
  addr.sin_port        = htons(4500);
  addr.sin_family      = AF_INET;
 
  if(bind(s, (struct sockaddr*)&addr, sizeof(addr)) == -1)
  {
    perror("bind() failed !\n");
    exit(0);
  }
 
  if(listen(s,3) == -1)
  {
    perror("listen() failed !\n");
    exit(0);
  }
 
  addr_length = sizeof(addr);
 
  c = accept(s, (struct sockaddr*)&addr,&addr_length);
  printf("Client from %s is connecting...\n",inet_ntoa(addr.sin_addr));
  if( c == -1)
  {
    perror("accept() failed !\n");
    exit(0);
  }
  printf("Client %s is connected...\n",inet_ntoa(addr.sin_addr));
  while(1)
  {
    bytes = recv(c,buffer,sizeof(buffer),0);
   
    if(bytes == -1)
    {
      perror("recv() failed !\n");
      exit(0);
    }
    else
    {
      buffer[bytes] = '\0';
      printf("> %s\n",buffer);
    }
   
    i = 0;
   
    printf("< ");
    while( (buffer[i] = getchar()) != '\n')
     i++;
    buffer[i] = '\0';
   
    bytes = send(c,buffer,strlen(buffer),0);
    if(bytes == -1)
    {
     perror("send() failed !\n");
     exit(0);
    }
   }
    close(c);
    close(s);
    exit(0);
}

Client
Code:
#include  <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(void)
{
  int  i = 0;
  int  s;
  int  bytes;
  char buffer[4096];
  struct sockaddr_in  addr;  
 
  s = socket(AF_INET,SOCK_STREAM,0);
  if(s == -1)
  {
   perror("socket() failed !\n");
   exit(0);
  }
 
  addr.sin_family       = AF_INET;
  addr.sin_port         = htons(4500);
  addr.sin_addr.s_addr  = inet_addr("127.0.0.1");
 
  if(connect(s,(struct sockaddr*)&addr,sizeof(addr)) == -1)
  {
    perror("connect() failed !\n ");
    exit(0);
  }
 
  for(;;)
   {
     printf("< ");
     while((buffer[i] = getchar()) != '\n')
      i++;
     buffer[i] = '\0';
     bytes = send(s,buffer,strlen(buffer),0);
     if(bytes == -1)
     {
      perror("send() failed !\n");
      exit(0);
     }
     
     i = 0;
     
     bytes = recv(s,buffer,sizeof(buffer),0);
     buffer[bytes] = '\0';
     printf("> %s\n",buffer);
   }
   close(s);
   exit(0);
}

Viel spass damit...

PS : Das Problem hab ich aus versehen ausgewählt....
 
Zurück
Oben