Newsgroup: it.comp.os.linux.development
Titolo: [lungo] programmazione socket

Ciao a tutti,
cercando di imparare a programmare con i socket
sotto linux ho scritto questi due programmi (in attachment,
si puo'?) che non vogliono saperne di comunicare.
server.c e' il programma server che apre un socket, ascolta
e accetta. client.c si connette e scrive una stringa sul
socket. server dovrebbe andare  a leggerla e stamparla.
Ho provato facendo girare entrambi sulla stessa macchina
(192.167.206.158 e' l'indirizzo della macchina nel programma,
se volete provarli cambiatelo)
Quello che si ottiene lanciando e':
$ ./server &
[1] 27182
$ ./client
New sock number: 4
2 bytes received
[1]    Segmentation fault            ./server
4 bytes sent.
Qualcuno mi sa dare una dritta?
niQ
============
#include <errno.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#include <stddef.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
main(){
int sock_server,sock_client,new_sock_server;
struct sockaddr_in address_server,address_client;
size_t length;
struct in_addr pippo;
char *buffer;
int nbytes;
int i;
pippo.s_addr=htonl(inet_network("192.167.206.158"));
address_server.sin_family=AF_INET;
address_server.sin_addr=pippo;
address_server.sin_port=htons(1120);
sock_server=socket(PF_INET,SOCK_STREAM,0);
if (bind(sock_server,(struct sockaddr*) &address_server,
        sizeof(address_server))<0)
 {
  perror("bind");
  exit(EXIT_FAILURE);
 }
if (listen(sock_server,10)<0)
 {
  perror("listen");
  exit(EXIT_FAILURE);
 }
new_sock_server=
        accept(sock_server,(struct sockaddr*) &address_client,&length);
if (new_sock_server<0)
 {
  perror("accept");
  exit(EXIT_FAILURE);
 }
else
 {
  printf("New sock number: %d\n",new_sock_server);
 }
nbytes=recv(new_sock_server,&buffer,2,0);
if (nbytes<0)
 {
  perror("recv");
  exit(EXIT_FAILURE);
 }
else
 {
  printf("%d bytes received\n",nbytes);
 }
printf("Received buffer: %s\n",buffer);
close(new_sock_server);
close(sock_server);
exit(EXIT_SUCCESS);
}
=============================
#include <errno.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#include <stddef.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
main(){
int sock_server,sock_client;
struct sockaddr_in address_server,address_client;
size_t length;
struct in_addr pippo;
char *msg;
int nbytes;
int i;
msg="messaggio promozionale";
pippo.s_addr=htonl(inet_network("192.167.206.158"));
address_server.sin_family=AF_INET;
address_server.sin_addr=pippo;
address_server.sin_port=htons(1120);
sock_client=socket(PF_INET,SOCK_STREAM,0);
if (connect(sock_client,(struct sockaddr*) &address_server,
        sizeof(address_server))<0)
 {
  perror("connect");
  exit(EXIT_FAILURE);
 }
nbytes=send(sock_client,msg,sizeof(msg),0);
if (nbytes<0)
 {
  perror("send");
  exit(EXIT_FAILURE);
 }
else
 {
  printf("%d bytes sent.\n",nbytes);
 }
close(sock_client);
exit(EXIT_SUCCESS);
}

 
ciao ciao
-- 
Antonio barbone ......
Outside of a dog, a book is man's best friend.
Inside of a dog, it's too dark to read.
		-- Groucho Marx

hmmm.... adesso vorrei non aver postato questo
messaggio.
Ho trovato l'errore... o meglio, adesso mi funziona...
c'era qualche cretinata connessa con la stringa di messaggio
msg o non so esattamente.
niQ

ahhhhhh ok
mi sa che hai ragione... :/
grazie....
niQ