UINT WINAPI threaded(LPVOID param)
{
void **tmp = (void **) param;
SOCKET sock = (SOCKET) tmp[0];
//Se conecta un cliente
char buffers[80];
memset(buffers, 0, sizeof(buffers)); //Clear the buffer
while (true)
{
///Creo un bucle para verificar que la función devuelve cierto.
while (!WriteRGBBytesIntoJpegFile(240,320,15,(unsigned char*) tmp[1])){}
//Almaceno la imagen y el tamaño en la estructura d
d=getJPG();
sprintf(buffers, "%8d", d->tam);
sendto(sock, buffers, sizeof(buffers) - 1,0, (struct sockaddr *) &remoteSocketAddress, sizeof remoteSocketAddress);
sendto(sock, (const char*)d->buffer,d->tam,0, (struct sockaddr *) &remoteSocketAddress, sizeof remoteSocketAddress);
proceso->SuspendThread();
}
ExitThread(0);
return 0;
}
void CARToolkitPPCDlg::OnIniciar()
{
m_renderizar=true;
render->ShowWindow(true);
render->SetFocus();
GXResume();
render->SetForegroundWindow();
int res=SHFullScreen(render->m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON);
//activamos el timer de renderizado
SetTimer(1,10,0);
SetTimer(2,400,0);
///Sockets a pelo
// Initiate the winsock2 library
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,2);
if (WSAStartup(wVersionRequested,&wsaData)!=0) {
printf("Initiating error");
exit(1);
}
//Definition of local and remote socket addresses
localSocketAddress.sin_family=AF_INET;
localSocketAddress.sin_port=htons((u_short)m_local_port);
localSocketAddress.sin_addr.s_addr=htonl(INADDR_ANY);
remoteSocketAddress.sin_family=AF_INET;
//remoteSocketAddress.sin_port=htons(7777);
remoteSocketAddress.sin_port=htons((u_short)m_remote_port);
// Here it's the remote machine ip address
int nSize = m_ip.GetLength();
char *pAnsiString = new char[nSize+1];
memset(pAnsiString,0,nSize+1);
wcstombs(pAnsiString, m_ip, nSize+1);
remoteSocketAddress.sin_addr.s_addr=inet_addr(pAnsiString);
// TCP sockets
sock=socket(PF_INET,SOCK_DGRAM,0);
if(sock==INVALID_SOCKET) {
printf("Creating socket error");
exit(1);
}
//Configuro los parámetros del socket
int val=5*1024*4;
int size=sizeof(int);
int flag=1;
setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (const char *) &val, sizeof(val));
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (const char *) &val, sizeof(val));
setsockopt(sock,IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(int));
int check=bind(sock,(sockaddr*)&localSocketAddress,sizeof(localSocketAddress));
/*unsigned long iostate = 1;
ioctlsocket(dialogSock,FIONBIO, &iostate); //non-blocking mode enabled
int check=bind(sock,(sockaddr*)&localSocketAddress,sizeof(localSocketAddress));
if(check==SOCKET_ERROR) {
printf("Bind error");
exit(1);
}
while (0!=listen(sock,0)){}
dialogSock=accept(sock,(struct sockaddr*)0, 0);
if(dialogSock==SOCKET_ERROR) {
printf("Accept error");
exit(1);
}*/
///Fin de sockets a pelo*/
void **tmp = new void*[2];
tmp[0]=(void *)sock;
tmp[1]=app->getConvertedData();
proceso = AfxBeginThread(threaded,(void*)tmp,THREAD_PRIORITY_NORMAL,0,0,NULL);
}