Ciao raga... mi stavo esercitando con le soclets... ho realizzato un programmino server-side, però non lo ho ancora testato anche perchè devo sviluppare il client... uso il protocollo TCP con IPv4
codice:
/*************************************************************************************/
/********* PaTeR - New Scripting Generation *********/
/********* Socket Script Example - Function: Server *********/
/*************************************************************************************/
// Including required headers
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
// Constants
#define MAX_MSG 1024
#define PORT 1991
#define PROTOCOL PF_INET
#define TYPE SOCK_STREAM
#define FAMILY AF_INET
// Functions:
int main();
// Starting Script
main()
{
// Initializing Socket structures
struct sockaddr_in cliAddr, servAddr;
// Init buffer for line to display
char line[MAX_MSG];
// Opening a socket stream: int socket(int domain, int type, int protocol)
int sockfd = socket(PROTOCOL, TYPE, 0);
// Control for incoming socket
if(sockfd <= 0) perror("Cannot create socket");
// Adjusting bind configuration, modifying struct variables
servAddr.sin_family = FAMILY;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(PORT);
// Assign a local address to a socket: int bind(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen)
int bindc = bind(sockfd, (struct sockaddr *) &servAddr, sizeof(servAddr));
// Control for bind
if(bindc < 0) perror("Cannot bind socket");
// Start 'passive socket': int listen(int sockfd, int backlog)
int listenc = listen(sockfd, 5);
// Control for incoming socket
if(listenc < 0) perror("Cannot start 'passive socket'");
// Start an infinite loop
while(1)
{
// Defining cliAddr size in cliLen
int cliLen = sizeof(cliAddr);
// Accept connection
int ccept = accept(sockfd, (struct sockaddr *) &cliAddr, &cliLen);
// If cannot accept connection
//if(ccept < 0) perror("Cannot accept connection ");
// Receive data
int result = recv(ccept, line, MAX_MSG, 0);
// Control for received data and print something
if(result == 0)
{
// Client closed connection
perror("Connection closed by Client");
}
else
{
if(result < 0)
{
// Cannot receive data
// perror("Cannot receive Data");
}
else
{
// Data received: Showing it
printf("Data received: %s", line);
}
}
}
}
la compilazione è ok, e va senza errori...
dite che va bene??
Ho cercato di usare IPv6 solo che mi dava alcuni errori mentre cerfavo di definire sin6_addr.in6_addr, con htonl(INADDR_ANY) mi diceva che i tipi erano incompatibili... dopo proverò con in6addr_any. intanto che mi dite? è un buon inizio per un dilettante come me? un esempio di client è facile da realizzare? grazie