Mulder90
31-01-2010, 19:12
Ciao a tutti.
Ultimamente mi sono messo a studiare i socket e ho fatto un client e un server il cui codice è quello sotto.
Il client riesce a scrivere messaggi al server che li riceve correttamente.
Volevo creare però qualcosa di più simile ad una chat dove il programma sia in grado di ricevere e spedire messaggi.
Dritte su come iniziare???:D
CLIENT:
#include <stdio.h>
#include <winsock2.h>
#define close closesocket
int init_winsock(void)
{
WSADATA wsadata;
int err;
err=WSAStartup(MAKEWORD(2,2),&wsadata);
if(err!=0)
return 0;
else
return 1;
}
int main()
{
int sock, port;
char ip[17];
char buffer[256];
struct sockaddr_in saddr;
if(!init_winsock())
{
printf("Errore durante l'inizializzazione di winsock2.\n");
return -1;
}
printf("Server Ip: ");
scanf("%16s", ip);
printf("Server Port: ");
scanf("%d", &port);
if((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Errore durante la creazione del socket.\n");
return -1;
}
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = inet_addr(ip);
saddr.sin_port = htons(port);
if(connect(sock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0)
{
printf("Errore durante la connessione a %s:%d\n", ip, port);
return -1;
}
printf("Connessione correttamente stabilita con %s:%d\n", ip, port);
printf("Ora e' possibile digitare messaggi da inviare al server\n\n");
do {
printf("> ");
fgets(buffer,256,stdin);
}
while(send(sock, buffer, sizeof(buffer), 0) > 0);
printf("Connessione persa.\n");
close(sock);
WSACleanup();
return 0;
}
SERVER:
#include <stdio.h>
#include <winsock2.h>
#define close closesocket
init_winsock(void)
{
WSADATA wsadata;
int err;
err=WSAStartup(MAKEWORD(2,2),&wsadata);
if(err!=0)
return 0;
else
return 1;
}
int main()
{
int sock, clientsd, port = 5000;
char buffer[256];
struct sockaddr_in saddr;
if(!init_winsock())
{
printf("Errore durante l'inizializzazione di winsock2.\n");
return -1;
}
if((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Errore durante la creazione del socket.\n");
return -1;
}
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons(port);
if((bind(sock, (struct sockaddr *) &saddr, sizeof(saddr))) < 0)
{
printf("Errore durante il binding del socket.\n");
return -1;
}
if((listen(sock, 1)) < 0)
{
printf("Errore durante il settaggio del socket in listening.\n");
return -1;
}
printf("In attesa che un client si connetta...\n");
clientsd = accept(sock, NULL, NULL);
printf("Si è connesso un client.\n\n");
while(recv(clientsd, buffer, 255, 0) > 0)
{
printf("%s\a\n", buffer);
}
printf("Connessione persa.\n");
close(sock);
WSACleanup();
return 0;
}
Ultimamente mi sono messo a studiare i socket e ho fatto un client e un server il cui codice è quello sotto.
Il client riesce a scrivere messaggi al server che li riceve correttamente.
Volevo creare però qualcosa di più simile ad una chat dove il programma sia in grado di ricevere e spedire messaggi.
Dritte su come iniziare???:D
CLIENT:
#include <stdio.h>
#include <winsock2.h>
#define close closesocket
int init_winsock(void)
{
WSADATA wsadata;
int err;
err=WSAStartup(MAKEWORD(2,2),&wsadata);
if(err!=0)
return 0;
else
return 1;
}
int main()
{
int sock, port;
char ip[17];
char buffer[256];
struct sockaddr_in saddr;
if(!init_winsock())
{
printf("Errore durante l'inizializzazione di winsock2.\n");
return -1;
}
printf("Server Ip: ");
scanf("%16s", ip);
printf("Server Port: ");
scanf("%d", &port);
if((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Errore durante la creazione del socket.\n");
return -1;
}
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = inet_addr(ip);
saddr.sin_port = htons(port);
if(connect(sock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0)
{
printf("Errore durante la connessione a %s:%d\n", ip, port);
return -1;
}
printf("Connessione correttamente stabilita con %s:%d\n", ip, port);
printf("Ora e' possibile digitare messaggi da inviare al server\n\n");
do {
printf("> ");
fgets(buffer,256,stdin);
}
while(send(sock, buffer, sizeof(buffer), 0) > 0);
printf("Connessione persa.\n");
close(sock);
WSACleanup();
return 0;
}
SERVER:
#include <stdio.h>
#include <winsock2.h>
#define close closesocket
init_winsock(void)
{
WSADATA wsadata;
int err;
err=WSAStartup(MAKEWORD(2,2),&wsadata);
if(err!=0)
return 0;
else
return 1;
}
int main()
{
int sock, clientsd, port = 5000;
char buffer[256];
struct sockaddr_in saddr;
if(!init_winsock())
{
printf("Errore durante l'inizializzazione di winsock2.\n");
return -1;
}
if((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Errore durante la creazione del socket.\n");
return -1;
}
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons(port);
if((bind(sock, (struct sockaddr *) &saddr, sizeof(saddr))) < 0)
{
printf("Errore durante il binding del socket.\n");
return -1;
}
if((listen(sock, 1)) < 0)
{
printf("Errore durante il settaggio del socket in listening.\n");
return -1;
}
printf("In attesa che un client si connetta...\n");
clientsd = accept(sock, NULL, NULL);
printf("Si è connesso un client.\n\n");
while(recv(clientsd, buffer, 255, 0) > 0)
{
printf("%s\a\n", buffer);
}
printf("Connessione persa.\n");
close(sock);
WSACleanup();
return 0;
}