Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ellentejilla en 27 Octubre 2010, 21:02 pm



Título: Socket C++ cliente/servidor con ip de internet: no me va
Publicado por: ellentejilla en 27 Octubre 2010, 21:02 pm
Hola wenas, he programado, mas bien copiado, dos rutinas: cliente y servidor. Estas funcionan cuando los pruebo en red privada, pero cuando intento acceder desde un ordenador a otro con la ip de internet del router me da el programa cliente el error: 'connect error' . El listado es:

Código
  1. #include <winsock2.h>
  2. #include <iostream.h>
  3. int gPort = 8888;
  4. int main()
  5. {
  6. SOCKET lhSocket;
  7. SOCKADDR_IN lSockAddr;
  8. WSADATA wsaData;
  9. int lConnect;
  10. int lLength;
  11. char lData[]="SendData";
  12. if(WSAStartup(MAKEWORD(2,0),&wsaData) != 0)
  13. {
  14. cout<<"Socket Initialization Error. Program aborted\n";
  15. system("PAUSE");
  16. return -1;
  17. }
  18. lhSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  19. if(lhSocket == INVALID_SOCKET)
  20. {
  21. cout<<"Invalid Socket "<<GetLastError()<<". Program Aborted\n"<<endl;
  22. }
  23. memset(&lSockAddr,0, sizeof(lSockAddr));
  24. lSockAddr.sin_family = AF_INET;
  25. lSockAddr.sin_port = htons(gPort);
  26. // lSockAddr.sin_addr.s_addr = inet_addr("192.168.1.2"); este si funcionaba
  27. lSockAddr.sin_addr.s_addr = inet_addr("87.267.40.77");
  28.  
  29. lConnect = connect(lhSocket,(SOCKADDR *)&lSockAddr,sizeof(SOCKADDR_IN));
  30. if(lConnect != 0)
  31. {
  32. cout<<"Connect Error. Program aborted\n";
  33. system("PAUSE");
  34. return -1;
  35. }
  36. lLength = send(lhSocket,lData,strlen(lData),0);
  37. if(lLength < strlen(lData))
  38. {
  39. cout<<"Send Error.\n";
  40. }
  41. closesocket(lhSocket);
  42. cout<<"ok";
  43. system("PAUSE");
  44. return 0;
  45. }
  46.  


Título: Re: Socket C++ cliente/servidor con ip de internet: no me va
Publicado por: Horricreu en 27 Octubre 2010, 21:22 pm
Varias cosas no relacionadas con los sockets, pero que son errores graves:

  • iostream.h es una cabecera que ya está obsoleta. Debes incluirla sin el .h final.
  • No usas std:: o using namespace std. Como consecuencia, te da error en cout y en cin.
  • Usas system("pause"). Puede no funcionar en algunos SO, por lo tanto utiliza getchar().