#pragma comment (lib,"ws2_32.lib") #include #include "cv.h" #include "highgui.h" #include struct init { int header; int width; int height; int origin; }; struct image { int header; int index; int stl; char buf[1150]; }; int ack = 'ACK '; int keep = 'KEEP'; int recvv = 0; WSADATA wsadata; int sock; struct sockaddr_in server; struct sockaddr_in client; int clientlen = 0; struct init initData; int main( int argc, char** argv ) { WSAStartup(MAKEWORD(2, 2), &wsadata); //Installerar sockets för applikationen sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(10); server.sin_family = AF_INET; bind(sock,(struct sockaddr *)&server, sizeof(server)); clientlen = sizeof(client); while(true) { recvv = recvfrom(sock, (char*)&initData, 16, 0, (struct sockaddr *) &client, &clientlen); printf("d%d\n", WSAGetLastError()); if(initData.header == 'INIT') { break; } if(recvv == -1) { continue; } sendto(sock, (char*)&ack, 4, 0, (struct sockaddr *) &client, sizeof(client)); printf("s%d\n", WSAGetLastError()); } cvNamedWindow( "Webcam", 1 ); //1 ifall fönstret inte ska kunna resizas IplImage* frame = 0; frame = cvCreateImage(cvSize(initData.width, initData.height), 8, 3); struct image imgData; int previndex = 0; while(true) { recvv = recvfrom(sock, (char*)&imgData, sizeof(imgData), 0, (struct sockaddr *) &client, &clientlen); int cs = sendto(sock, (char*)&keep, sizeof(keep), 0, (struct sockaddr *) &client, sizeof(client)); if(imgData.header != 'IMAG') { continue; } if(!frame) { break; } if(previndex > imgData.index) { frame->origin = initData.origin; cvShowImage( "Webcam", frame ); int c = cvWaitKey(1); if(c == 27) break; } previndex = imgData.index; memmove(frame->imageData+imgData.index, imgData.buf, imgData.stl); } cvReleaseImage(&frame); cvDestroyWindow("Webcam"); system("PAUSE"); return 0; }