BlueDude Skrevet 3. mai 2010 Del Skrevet 3. mai 2010 (endret) Hei Sitter å prøver å lage en data overføring mellom 2 programmer via en socket. Sånn den er i dag så må jeg selv kjøre connect og listen osv. Har lagd en callback som jeg fant i exempel ,men vet ikke hvordan jeg faktisk bruker det. Så det jeg ønsker hjelp til er å faktisk lage socketen asynchronous. Her er ServerSocket.cpp fila som jeg bruker: #include "stdafx.h" #include "ServerSocket.h" #define SOCK_STREAM 1 #define SOCK_DGRAM 2 #define SOCK_RAW 3 #define AF_INET 2 #define IPPROTO_TCP 6 #define MY_MESSAGE_NOTIFICATION 1048 ServerSocket::ServerSocket(){ }; LRESULT CALLBACK ServerSocket::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ switch(message){ case MY_MESSAGE_NOTIFICATION: { switch(lParam){ case FD_ACCEPT:{ cout<<"ACCEPT\n"; break; } case FD_CONNECT:{ cout<<"CONNECT\n"; break; } case FD_READ:{ char buffer[80]; memset(buffer, 0, sizeof(buffer)); recv(ss, buffer, sizeof(buffer)-1, 0); cout<<"READ\n"<<buffer; MessageBeep(MB_OK); break; } case FD_CLOSE:{ Break; } } } break; default: return DefWindowProc(hwnd, message, wParam, lParam); } } ServerSocket::~ServerSocket(){ CloseConnection(); } int ServerSocket::ListenOnPort(int portno) { int error = WSAStartup (0x0202, &w); // Fill in WSA info if (error){ cout<<"Winsock"; return false; //For some reason we couldn't start Winsock } if (w.wVersion != 0x0202) //Wrong Winsock version? { cout<<"version"; WSACleanup (); return false; } SOCKADDR_IN addr; // The address structure for a TCP socket addr.sin_family = AF_INET; // Address family addr.sin_port = htons (portno); // Assign port to this socket addr.sin_addr.s_addr = htonl (INADDR_ANY); ss = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); // Create socket if (ss == INVALID_SOCKET) { cout<<"create"; return false; //Don't continue if we couldn't create a //socket!! } if (bind(ss, (LPSOCKADDR)&addr, sizeof(addr)) == SOCKET_ERROR) { //We couldn't bind (this will happen if you try to bind to the same //socket more than once) cout<<"bind"; return false; } cout<<"shhh!! listen\n"; listen(ss, SOMAXCONN); WSAAsyncSelect(ss,hwnd ,MY_MESSAGE_NOTIFICATION ,FD_ACCEPT | FD_CONNECT | FD_READ | FD_CLOSE); } } Endret 7. mai 2010 av BlueDude Lenke til kommentar
BlueDude Skrevet 6. mai 2010 Forfatter Del Skrevet 6. mai 2010 Svarer på min egen tråd tilfelle det skulle være andre som trengte noe lignende. Siden jeg brukte VCL forms så virket det som om det var vanskelig å få til en Async.Socket ved hjelp av window messages som jeg prøvde på i første posten, I stede gikk jeg over til å bruke WSAEventSelect() isteden for å bruke WSAAsyncSelect(), Dette gjør at man tar i mot events og legger de til en eventlist og behandler de ut i fra det. Brukte denne tutorial`n til hjelp med å bygge om socketene mine: winsocket Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå