Błąd podczas kompilacji, programu z socketami

0

Miałam za zadanie uruchomić przykład, następnie pisać własne inne programy.

Problem polega na tym, że mimo kompilacji w g++, zgodnie z uwagą prowadzącego, kompilacja wyrzuca następujące błędy:

Tutaj jest kod:


[email protected]:~/Desktop/TEMAT B$ g++ -o prosty_socket  PROSTY_SOCKET.cc unix.h
PROSTY_SOCKET.cc: In function 'int main()':
PROSTY_SOCKET.cc:71:24: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
PROSTY_SOCKET.cc:75:24: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]



/*
   Gniazdka, najprostszy przyklad ...
   ----------------------------------
*/

#include "unix.h"
#define PORT 7000

void ObsSygnalu(int)
{ printf("pojawil sie sygnal SIGPIPE !!! (pid==%i)\n",getpid());
}
char *AdresCyfrowyKropkowy(char *name);

main()
{
  signal(SIGPIPE,ObsSygnalu);
    // na wszelki wypadek ...

  int pid,status,i,j;
  pid=fork();
  if(pid==0) // pp: tutaj bedzie serwer ...
  {
    printf("serwer: pid==%i\n",getpid()); 
     
    int sock=socket (AF_INET,SOCK_STREAM,0);

    struct sockaddr_in adres;
    memset(&adres,0,sizeof(adres));
    adres.sin_family=AF_INET;
    //adres.sin_addr.s_addr=inet_addr(AdresCyfrowyKropkowy("venus"));
    adres.sin_addr.s_addr=INADDR_ANY;
    adres.sin_port=htons(PORT);
    i=bind(sock,(struct sockaddr *)&adres,sizeof(adres));
    printf("serwer: bind()=%i\n",i);

    listen(sock,5);

    // czekamy na dokladnie 2 klientow !
    //
    for(int licznik=1;licznik<=2;licznik++)
    {
      printf("serwer: czekam na klienta nr %i\n",licznik);
      int nowy_sock=accept(sock,NULL,NULL);
      printf("serwer: accept()=%i\n",nowy_sock);
      printf("serwer: poczatek obslugi klienta nr %i\n",licznik);
      
      char buf[100];
      i=read(nowy_sock,buf,99);
      buf[i]=0;
      printf("serwer: read()=%i buf=%s\n",i,buf);

      j=write(nowy_sock,buf,i);
      printf("serwer: write()=%i\n",j);
        // jak widac serwer dziala jak 'echo'
        // odsyla to co przyszlo !
        
      close(nowy_sock);
    }

    close(sock);
    exit(0);
  }
  else // pm: tutaj bedzie klient ...
  {
    printf("klient: pid==%i\n",getpid()); 

    extern void klient(char *);

    sleep(1);
    printf("klient: pierwsze polaczenie ...\n");
    klient("1234567890");

    sleep(1);
    printf("klient: drugie polaczenie ...\n");
    klient("QWERTYUIOP");

    i=wait(&status);
    printf("klient: wait()=%i %04X\n",i,status);
  }
}

void klient(char *c)
{
  int i,j;
  int sock=socket (AF_INET,SOCK_STREAM,0);

  struct sockaddr_in adres;
  memset(&adres,0,sizeof(adres));
  adres.sin_family=AF_INET;
  //adres.sin_addr.s_addr=inet_addr(AdresCyfrowyKropkowy("venus"));
  //adres.sin_addr.s_addr=inet_addr("1.2.3.4");
  adres.sin_addr.s_addr=INADDR_ANY;
  adres.sin_port=htons(PORT);
  i=connect(sock,(struct sockaddr *)&adres,sizeof(adres));
  printf("klient: connect()=%i\n",i);

  i=write(sock,c,strlen(c));
  printf("klient: write()=%i\n",i);

  char buf[100];
  i=read(sock,buf,99);
  buf[i]=0;
  printf("klient: read()=%i buf=%s\n",i,buf);
  
  close(sock);
}

char *AdresCyfrowyKropkowy(char *name)
{
  struct hostent *hostp;
  if ((hostp=(struct hostent *)gethostbyname(name))!=NULL)
  {
    return inet_ntoa(*(in_addr*)*hostp->h_addr_list);
       // jak dlugo ten wynik istnieje ??????
  }
}


Oczywiście mam też plik unix.h w którym są biblioteki, jeśli będzie to potrzebne mogę załączyć.

0

To nie sa bledy, tylko ostrzezenia. Kod jest napisany w C, a kompilujesz go kompilatorem do C++, wiec pewne rzeczy po prostu w C++ sa przestarzale.

0

A tak, teraz widzę że mimo właśnie ostrzeżeń program powstał.

Czy powinnam zmienić kompilator, na kompilator dla C?

Czy oprócz ostrzeżeń, wszystko będzie w porządku?

0

No jak piszesz w C to wypadaloby uzywac kompilatora C. Poza tym wszystko powinno dzialac.

1 użytkowników online, w tym zalogowanych: 0, gości: 1