Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #include <string.h>
- void error(const char *msg)
- {
- perror(msg);
- exit (EXIT_FAILURE);
- }
- struct mjpeg_header {
- unsigned short size;
- char reserved;
- char reserved2;
- };
- void save(char *img_data) {
- //TODO: dynamic filename
- FILE *file;
- file = fopen("/tmp/test.jpg","w+");
- if(file==NULL) {
- error("ERROR opening file");
- }
- fputs(img_data, file);
- fclose(file);
- }
- int main(int argc, char *argv[])
- {
- int sock, n;
- unsigned short int port = 4321;
- struct sockaddr_in serv_addr;
- struct hostent *hostinfo;
- char request[] = {0x30,0x31,0x31,0x30,0x0a};
- char camera_address[] = "10.0.1.200";
- struct mjpeg_header header;
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if (sock < 0) {
- error("ERROR opening socket");
- }
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_port = htons(port);
- if (!(hostinfo = gethostbyname(camera_address))) {
- error("ERROR No host found");
- }
- serv_addr.sin_addr = *(struct in_addr*)hostinfo->h_addr;
- if (0 > connect(sock, (struct sockaddr *) &serv_addr, sizeof (serv_addr))) {
- error ("ERROR Connecting");
- }
- n = write(sock,request,strlen(request));
- if (n < 0) {
- error("ERROR writing to socket");
- }
- n = read(sock,&header,sizeof(header));
- if (n < 0) {
- error("ERROR reading from socket");
- }
- char image_data[header.size];
- bzero(image_data,header.size);
- n = read(sock,image_data,header.size);
- if (n < 0) {
- error("ERROR reading from socket");
- }
- close(sock);
- save(image_data);
- return 0;
- }
Add Comment
Please, Sign In to add comment