Witam wszystkich!

Pragnąc rozszerzyć swoje umiejętności w socketach natknąłem się na problem, otóż chciałem stworzyć aplikacja która by wysyłała dany pakiet do servera na danym porcie i sockecie.
Jednym słowem jest to podpięcie się pod klienta który ma już wygenerowany socket.

Aktualny kod programu:

#include <winsock.h>
#include <iostream.h>
#include <stdlib.h>
#include <string.h>

//using namespace std;

int main(int argc, int **argv)
{
   WSADATA wsda;				// informacja zwrocona przez WSAStartup
   struct hostent *host;		// informacja o serwerze
   char szMessage[80]={0x6c,0x6f,0x6c};			// komunikat
   int iMessageLen;
   int ret;
   char szInBuffer[128];
   int iBufferLen;
   char szAddress[64]="213.248.126.85"; // IP servera
   int iPort;

   SOCKET s;		         // uzywane gniazdo
   SOCKADDR_IN addr;	      // adres hosta

   // pobranie adresu IP
   cout << "Podaj adres IP do ktorego wyslac (np. 127.0.0.1) ...\n";
   //cin.getline(szAddress,64,'\n'); 
   // port na ktorym sie komunikujemy (0...65535)
   iPort = 5555; // Port servera
   // pobranie komunikatu do bufora
   cout << "Wpisz komunikat ...";
   //cin.getline(szMessage,80,'\n');   

   // dlugosc komunikatu
   iMessageLen = strlen(szMessage);
   cout << "Len: " << iMessageLen << endl; // Wyswietla dlugosc komunikatu
   // zaladuj WinSock w wersji 2.2
   WSAStartup(MAKEWORD(2,2), &wsda);

   // stworzenie gniazda TCP
   s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
   cout << "Socket: "<< s << endl ; // Wyswietlenie socketu
   // sprawdzenie bledu
   if(s == SOCKET_ERROR)
   {
      cout << "Blad przy inicjalizacji gniazda : " << WSAGetLastError() << endl;
      system("PAUSE");
      exit(1);
   }

   // informacja o hoscie
   addr.sin_family = AF_INET;
   addr.sin_port = htons(iPort);
   addr.sin_addr.s_addr = inet_addr(szAddress);

   // laczenie z serwerem
   cout << "Laczenie z hostem " << szAddress << " na porcie " << iPort << endl;
   ret = connect(s, (struct sockaddr *) &addr, sizeof(addr));

   // sprawdzenie bledu
   if(ret == SOCKET_ERROR)
   {
      cout << "Blad przy laczeniu z serwerem : " << WSAGetLastError() << endl;
      system("PAUSE");      
	  exit(1);
   }

   // wyslanie komunikatu
   cout << "Wysylanie pakietu..." << endl;
   ret = send(s, szMessage, iMessageLen, 0);

   // sprawdzenie bledu
   if(ret == SOCKET_ERROR)
   {
      cout << "Blad przy wysylaniu komunikatu : " << WSAGetLastError() << endl;
      system("PAUSE");
      exit(1);
   }

   // odbior komunikatu zwrotnego
   cout << "Oczekiwanie na komunikat zwrotny..." << endl;
   ret = recv(s, szInBuffer, sizeof(szInBuffer), 0);

   // sprawdzenie bledu
   if(ret == SOCKET_ERROR)
   {
      cout << "Blad przy odbiorze komunikatu zwrotnego : " << WSAGetLastError() << endl;
      system("PAUSE");
      exit(1);
   }
   
   // wyswietlenie komunikatu zwrotnego
   iBufferLen = ret;
   szInBuffer[iBufferLen] = '\0';
   cout << "Otrzymano komunikat o tresci \"" << szInBuffer << "\" od hosta " << szAddress << endl;
   
   // zamkniecie gniazda
   closesocket(s);

   // zamkniecie WinSock
   WSACleanup();
   
   system("PAUSE");

   return 0;
}
 

Program kompiluje się bez problemu po czym jest generowany wolny socket po czym wysyła do servera pakiet, po wysłaniu program odbiera odpowiedź od servera po czym zamyka socket.

Za pomocą programu snifferskiego WPE PRO łapałem aktualny Socket który używa aplikacja ip oraz port. Niestety gdy próbuję utworzyć połączenie na tym samym sockecie dostaję odmowę dostępu od WSA kod błędu 10038.
Próbowałem też bindować socketa lecz bez skutku, prosiłbym o waszą pomoc z moim problemem.

Chcę tylko połączyć się do servera na tym samym Sockecie co aplikacja by móc w łatwy sposób wysłać własne pakiety.

Pozdrawiam,
Kameha