Socket C++ cliente/servidor con ip de internet: no me va

Iniciado por ellentejilla, 27 Octubre 2010, 21:02 PM

0 Miembros y 1 Visitante están viendo este tema.

ellentejilla

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 (cpp) [Seleccionar]
#include <winsock2.h>
#include <iostream.h>
int gPort = 8888;
int main()
{
SOCKET lhSocket;
SOCKADDR_IN lSockAddr;
WSADATA wsaData;
int lConnect;
int lLength;
char lData[]="SendData";
if(WSAStartup(MAKEWORD(2,0),&wsaData) != 0)
{
cout<<"Socket Initialization Error. Program aborted\n";
system("PAUSE");
return -1;
}
lhSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(lhSocket == INVALID_SOCKET)
{
cout<<"Invalid Socket "<<GetLastError()<<". Program Aborted\n"<<endl;
}
memset(&lSockAddr,0, sizeof(lSockAddr));
lSockAddr.sin_family = AF_INET;
lSockAddr.sin_port = htons(gPort);
// lSockAddr.sin_addr.s_addr = inet_addr("192.168.1.2"); este si funcionaba
lSockAddr.sin_addr.s_addr = inet_addr("87.267.40.77");

lConnect = connect(lhSocket,(SOCKADDR *)&lSockAddr,sizeof(SOCKADDR_IN));
if(lConnect != 0)
{
cout<<"Connect Error. Program aborted\n";
system("PAUSE");
return -1;
}
lLength = send(lhSocket,lData,strlen(lData),0);
if(lLength < strlen(lData))
{
cout<<"Send Error.\n";
}
closesocket(lhSocket);
cout<<"ok";
system("PAUSE");
return 0;
}


Horricreu

#1
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().