00001
00002 #include <sys/time.h>
00003 #include <arpa/inet.h>
00004 #include <stdio.h>
00005 #include <stdlib.h>
00006 #include <unistd.h>
00007 #include <string.h>
00008
00009 #include "Capture.H"
00010
00011 bool useTcp = true;
00012
00013 int initServer()
00014 {
00015 int sock;
00016 int istrue=1;
00017
00018 struct sockaddr_in server_addr;
00019
00020 if (useTcp)
00021 {
00022 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
00023 perror("Socket");
00024 exit(1);
00025 }
00026 } else {
00027
00028 if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
00029 perror("Socket");
00030 exit(1);
00031 }
00032 }
00033
00034
00035 if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&istrue,sizeof(int)) == -1) {
00036 perror("Setsockopt");
00037 exit(1);
00038 }
00039
00040 server_addr.sin_family = AF_INET;
00041 server_addr.sin_port = htons(5000);
00042 server_addr.sin_addr.s_addr = INADDR_ANY;
00043 bzero(&(server_addr.sin_zero),8);
00044
00045 if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) {
00046 perror("Unable to bind");
00047 exit(1);
00048 }
00049
00050 if (useTcp)
00051 {
00052 if (listen(sock, 5) == -1) {
00053 perror("Listen");
00054 exit(1);
00055 }
00056
00057 printf("\nTCPServer Waiting for client on port 5000\n");
00058 fflush(stdout);
00059 }
00060
00061
00062 return sock;
00063
00064 }
00065
00066
00067 int main(int argc, char** argv)
00068 {
00069
00070 Capture camera(320,240,15);
00071
00072 camera.initCapture();
00073
00074 int sock = initServer();
00075
00076 while(1)
00077 {
00078 char send_data [1024] , recv_data[1024];
00079
00080 int connected = -1;
00081 struct sockaddr_in client_addr;
00082 socklen_t sin_size = sizeof(struct sockaddr_in);
00083
00084 if (useTcp)
00085 connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size);
00086
00087 printf("\n I got a connection from (%s , %d)",
00088 inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
00089
00090 int width = 320;
00091 int height = 240;
00092 unsigned char img[width*height*3];
00093
00094 int bytes_recieved = -1;
00095 if (useTcp)
00096 bytes_recieved = recv(connected,recv_data,1024,0);
00097 else
00098 bytes_recieved = recvfrom(sock, recv_data, 1024, 0, (struct sockaddr *)&client_addr,&sin_size);
00099
00100 while (1)
00101 {
00102 struct timeval real1, real2;
00103
00104 gettimeofday(&real1, 0);
00105 for(uint i=0; i<30; i++)
00106 {
00107
00108 unsigned int frameSize = 0;
00109 unsigned char* img = camera.grabFrameRaw(frameSize);
00110
00111 if (useTcp)
00112 {
00113 send(connected, &frameSize, sizeof(frameSize), 0);
00114 send(connected, img, frameSize, 0);
00115 } else {
00116 sendto(sock, &frameSize, sizeof(frameSize), 0, (const struct sockaddr*)&client_addr,sin_size);
00117 sendto(sock, img ,frameSize, 0, (const struct sockaddr*)&client_addr,sin_size);
00118 }
00119 }
00120 gettimeofday(&real2, 0);
00121 const double real_secs =
00122 (real2.tv_sec - real1.tv_sec)
00123 + (real2.tv_usec - real1.tv_usec)
00124 / 1000000.0;
00125
00126 char msg[255];
00127 printf("fps %0.2f\n", 30.0/real_secs);
00128 }
00129 close(connected);
00130 }
00131
00132 close(sock);
00133
00134
00135 return 0;
00136 }
00137
00138
00139