Uppgifter | |
Användarnamn | |
Besök | - |
Hemsida | Ingen |
Plats (stad) | |
Senaste besök | 01:00 - 1:a Januari 1970 |
Poster i forumet | |
Varningar | |
Grupp | |
Medlem sedan | 01:00 - 1:a Januari 1970 |
Artiklar och filer | |
Den här användaren har inga artiklar eller filer |
Den här användaren har inte skapat någon personlig presentation. |
Server/klient ihopkoppling via winsock |
sorry.. fick felmeddelande när jag skulle posta så jag trodde att de inte fungerade Postad 15:15 - 30:e Januari 2007 |
c++ winsock server /klient |
Vet ej hur man tar bort trådar så bortse från denna Postad 14:09 - 30:e Januari 2007 |
Klientanslutning till server med winsock |
Vet ej hur man tar bort trdar s bortse frn denna Postad 14:08 - 30:e Januari 2007 |
Server/klient ihopkoppling via winsock |
Hej jag min polare har precis fått en uppgift att med hjälp av två nästan fullständiga program få det ena som är en klient att ansluta till det andra som agerar server. Skulle någon kanske kunna kolla igenom dessa program och ge oss synpunkter då vi helt kört fast. Klienten: #define WIN32_LEAN_AND_MEAN #pragma comment(lib, "wsock32.lib") // eller obs komm ihåg att länka wsock32.lib #include <windows.h> #include <winsock2.h> #include <iostream> using namespace std; int main() { char szSmtpServerName[64] = ""; char szToAddr[64] = ""; char szFromAddr[64] = ""; char TextIn[4096] = ""; char szLine[255] = ""; char TextOut[255] = ""; SOCKET hServer; WSADATA WSData; LPHOSTENT lpHostEntry; SOCKADDR_IN SockAddr; cout << "Server namn :" ; cin >> TextIn; strcpy (szSmtpServerName,TextIn); int port; cout << "Port :" ; cin >> port; // Initiera WinSock (1.1 eller senare) if(WSAStartup(MAKEWORD(1, 1), &WSData)) { cout << "Kan inte hitta v" << 1 << "." << 1 << " eller senare!" << endl; return 1; } //hämta eget namn char namn[25]; gethostname(namn, sizeof(namn)); cout << namn; // visa egen IP adress PHOSTENT hostinfo; hostinfo = gethostbyname(namn); cout << endl << inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list) << endl; // hämta serverns IP adress. lpHostEntry = gethostbyname(szSmtpServerName); if(!lpHostEntry) { cout << "Kan inte hitta servern : " << szSmtpServerName << endl; return 1; } // Skapa TCP/IP sockeln hServer = socket(PF_INET, SOCK_STREAM, 0); if(hServer == INVALID_SOCKET) { cout << "Kan inte öppna mail server sockeln" << endl; return 1; } // Skapa Sockel Adress struktur SockAddr.sin_family = AF_INET; SockAddr.sin_port = htons(port); SockAddr.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list); // Ansluta till sockeln if(connect(hServer, (PSOCKADDR) &SockAddr, sizeof(SockAddr))) { cout << "Fel med anslutning till Server sockeln" << endl; return 1; } char Text[255]; while (1) { recv(hServer, TextIn, sizeof(TextIn), 0); cout << endl << TextIn << endl; cout << endl << "Skicka : "; cin >> Text; send(hServer, Text, strlen(Text), 0); strcpy(Text," "); strcpy(TextIn," "); } closesocket(hServer); WSACleanup(); system ("pause"); return 0; } [SOURCE=cpp][/SOURCE][B][/B] Servern: #define WIN32_LEAN_AND_MEAN // obs komm ihåg att länka wsock32.lib #include <windows.h> #include <winsock2.h> #include <iostream> #pragma comment(lib, "wsock32.lib") using namespace std; int MAX_CONNECTS=5, PORT=1234,SO_MAXCONN=5, ClientID; bool ThreadInit = false; struct CLIENTS { bool InUse; SOCKET ClientSocket; sockaddr_in ClientAddress; DWORD* dwThreadID; HANDLE hThreadID; }; SOCKET SinkSocket; sockaddr_in SinkSockAddr; CLIENTS Clients[ 5 ]; SOCKET ListeningSocket; sockaddr_in Address; HRESULT InitWinSock( ); HRESULT StartClientThread( ); DWORD WINAPI ClientThreadEntry( LPVOID Arg1 ); main() { InitWinSock(); ListeningSocket = socket( AF_INET, SOCK_STREAM, 0 ); Address.sin_family = AF_INET; Address.sin_port = htons( PORT ); Address.sin_addr.s_addr = htonl( INADDR_ANY ); bind( ListeningSocket, (LPSOCKADDR)&Address, sizeof(Address)); listen( ListeningSocket, SO_MAXCONN ); StartClientThread( ); Clients[ClientID].hThreadID = CreateThread( NULL, 0, &ClientThreadEntry, 0, 0, Clients[ClientID].dwThreadID ); return 0; } HRESULT InitWinSock( ) { WSADATA wsad; for( int i = 0; i < MAX_CONNECTS; i++ ) { Clients[i].InUse = false; } WSAStartup( MAKEWORD( 2, 2 ), &wsad ); return S_OK; } HRESULT StartClientThread( ){ // NO ONE ELSE CAN CONNECT UNTIL THIS THREAD IS READY ThreadInit = true; for( int i = 0; i < 5; i++ ){ if( Clients[i].InUse == true ){ ClientID = i; break; } } return 0; } DWORD WINAPI ClientThreadEntry( LPVOID Arg1 ){ int ClientNo = ClientID; CLIENTS *Client = &Clients[ ClientID ]; Client->InUse = true; // MOVE THE SOCKET INFORMATION FROM SOCK A TO SOCKET B memcpy( &Client->ClientSocket, &SinkSocket, sizeof( SinkSocket )); memcpy( &Client->ClientAddress, &SinkSockAddr, sizeof( SinkSockAddr )); // DONE .. CONTINUE NORMAL EXECUTION IN THE PARENT THREAD ThreadInit = false; return 0; } //Vi har fått klienten att fungera i sig men inte att få den att ansluta tillservern. Väldigt tacksam för svar // Jonas Postad 14:07 - 30:e Januari 2007 |
Datum
2024-04-28 14:25
Vecka: 17
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.