#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");
#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<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$
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
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![]()