#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> // atoi #include <string.h> // bzero #include <unistd.h> #include <SDL/SDL.h> void SetPxl(int x, int y, Uint8 color, SDL_Surface *pScreen) { Uint8 *bufp; bufp = (Uint8 *)pScreen->pixels + y*pScreen->pitch + x; *bufp = color; SDL_UpdateRect(pScreen, x, y, 1, 1); } int main(int argc, char** argv ) { int sockfd,newsockfd,clilen,chilpid,ok,nleft,nbwriten; char c; struct sockaddr_in cli_addr,serv_addr; SDL_Init(SDL_INIT_VIDEO); SDL_Surface *pScreen = SDL_SetVideoMode(320,240,8,SDL_SWSURFACE); for (int y=0;y<240;y++) for (int x=0;x<320;x++) SetPxl(x,y,(Uint8)x+y,pScreen); char *pDatas = (char*)pScreen->pixels; for (int y=0;y<240;y++) for (int x=0;x<320;x++) SetPxl(x,y,*++pDatas,pScreen); printf("Taille de la SDL_Surface : %uo, %uko\n",320*240,320*240/1024); if (argc!=3) {printf ("usage socket_clt adresse_serveur numero_de_por\n");exit(0);} printf ("client starting\n"); /* initialise la structure de donnee */ bzero((char*) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); /* ouvre le socket */ if ((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) {printf("socket error\n");exit(0);} /* effectue la connection */ if (connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0) {printf("socket error\n");exit(0);} SDL_Quit(); { int done = 0; int n; printf("Envois de l'image en cours\n"); while (done<320*240) { n = write(sockfd, (char*)pDatas+done, 320*240 -done); if (n < 0) { printf("Erreur:(\n"); break; /* erreur */ } done += n; } if (done!=320*240) printf("Echec de l'envois\n"); else printf("Envois reussit\n"); close(sockfd); } return 0; }
/* Exemple de serveur pour les sockets, le serveur * attend un socket et affcihe a l'ecran tout ce * qu'il y recoit. * * compiler avec la commande * sur les pc linux * cc socket_srv.c -o socket_srv * sur les sun * cc socket_srv.c -o socket_srv -lsocket -lnsl * * utilisation * socket_srv numero_de_port * * note: le numero de port doit etre plus grand * que 1024. * */ #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int argc, char** argv ) { char datas[] = "bonjour\n"; int sockfd,newsockfd,clilen,chilpid,ok,nleft,nbwriten; char c; char pixels[320*240]; struct sockaddr_in cli_addr,serv_addr; if (argc!=2) {printf ("usage: socket_srv port_number\n");exit(0);} printf ("server starting...\n"); /* ouvertture du socket */ sockfd = socket (AF_INET,SOCK_STREAM,0); if (sockfd<0) {printf ("impossible d'ouvrir le socket\n");exit(0);} /* initialisation des parametres */ bzero((char*) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(atoi(argv[1])); /* effecture le bind */ if (bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0) {printf ("impossible de faire le bind\n");exit(0);} /* petit initialisation */ listen(sockfd,1); /* attend la connection d'un client */ clilen = sizeof (cli_addr); newsockfd = accept (sockfd,(struct sockaddr*) &cli_addr, &clilen); if (newsockfd<0) {printf ("accept error\n"); exit(0);} printf ("connection accepted\n"); { int done = 0; int n; char pDatas[320*240]; printf("Reception de l'image en cours\n"); while (done<320*240) { n = read(newsockfd, (char*)pDatas+done, 320*240 -done); if (n < 0) { printf("Erreur :(\n"); break; } done += n; } if (n!=320*240) printf("L'image n'a pas ete recue correctement\n"); else printf("Image recu.\n"); close(sockfd); } return 0; }
if (n!=320*240) printf("L'image n'a pas ete recue correctement\n"); else printf("Image recu.\n");
int main(int argc, char** argv )
{ char datas[] = "bonjour\n";
int sockfd,newsockfd,clilen,chilpid,ok,nleft,nbwriten;
char c;
char pixels[320*240];
struct sockaddr_in cli_addr,serv_addr;
if (argc!=2) {printf ("usage: socket_srv port_number\n");exit(0);}
printf ("server starting...\n");
/* ouvertture du socket */
sockfd = socket (AF_INET,SOCK_STREAM,0);
if (sockfd<0) {printf ("impossible d'ouvrir le socket\n");exit(0);}
/* initialisation des parametres */
bzero((char*) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));
/* effecture le bind */
if (bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
{printf ("impossible de faire le bind\n");exit(0);}
/* petit initialisation */
listen(sockfd,1);
/* attend la connection d'un client */
clilen = sizeof (cli_addr);
newsockfd = accept (sockfd,(struct sockaddr*) &cli_addr, &clilen);
if (newsockfd<0) {printf ("accept error\n"); exit(0);}
printf ("connection accepted\n");
{
int done = 0;
int n;
char pDatas[320*240];
printf("Reception de l'image en cours\n");
while (done<sizeof(pDatas))
{
n = read(newsockfd, pDatas+done, pDatas-done);
if (n>0)
printf("n=%u\n",n);
if (n < 0)
{
printf("Erreur :(\n");
break;
}
done += n;
}
if (done!=sizeof(pDatas))
printf("L'image n'a pas ete recue correctement: done = %u\n",done);
else
printf("Image recu.\n");
close(sockfd);
}
return 0;
}
Ordinateur-de-JackosKing:~/Desktop/Galileo jackosking$ ./server 9999 server starting... connection accepted Reception de l'image en cours Erreur :( L'image n'a pas ete recue correctement: done = 0 Ordinateur-de-JackosKing:~/Desktop/Galileo jackosking$
int main(int argc, char** argv )
{
int sockfd,newsockfd,clilen,chilpid,ok,nleft,nbwriten;
struct sockaddr_in cli_addr,serv_addr;
if (argc!=3) {printf ("usage socket_clt adresse_serveur numero_de_por\n");exit(0);}
printf ("client starting\n");
/* initialise la structure de donnee */
bzero((char*) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
serv_addr.sin_port = htons(atoi(argv[2]));
/* ouvre le socket */
if ((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{printf("socket error\n");exit(0);}
/* effectue la connection */
if (connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
{printf("socket error\n");exit(0);}
{
int done = 0;
int n;
char pDatas[320*240];
printf("Envois de l'image en cours, taille=%u\n",sizeof(pDatas));
while (done<sizeof(pDatas))
{
n = write(sockfd, pDatas+done, sizeof(pDatas)- done);
if (n>0)
printf("n=%u\n",n);
if (n < 0)
{
printf("Erreur:(\n");
break; /* erreur */
}
done += n;
}
if (done!=sizeof(pDatas))
printf("Echec de l'envois: done =%u\n",done);
else
printf("Envois reussit\n");
close(sockfd);
}
return 0;
}
jackosking@JackosKing-pc:~/Desktop/Galileo/ClientWebCam$ ./ClientWebCam 192.168.1.101 9999 client starting Envois de l'image en cours, taille=76800 n=13032 jackosking@JackosKing-pc:~/Desktop/Galileo/ClientWebCam$
JackosKing VNR :
pour compiler le client: g++ client.c -o client -lSDL devrait marcher, bon je vais tester![]()