Hola que tal,recien estoy con los sockets,intento conectarme a una IP,por el puerto 80 ya que es una pagina,solo quiero conectar,el codigo no da error,peor el IF que averigua si se conecta me da el error,miren:
SOCKET Cliente;
u_short Puerto = 80;
SOCKADDR_IN SockAddr;
char Datos[] = "Hola";
WSADATA skd;
int main(void)
{
if(WSAStartup(MAKEWORD(2,0),&skd) != 0)
{
	std::cout << "Error initializing socket";
	std::cin.get();
	return 0;
}
if(socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) == INVALID_SOCKET)
{
	std::cout <<"Invalid socket";
	return 1;
}
memset(&SockAddr,0,sizeof(SockAddr));
SockAddr.sin_family = AF_INET;
SockAddr.sin_port = htons(Puerto);
SockAddr.sin_addr.s_addr = inet_addr("74.125.39.99");
int con = connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR_IN));
if(con != 0)
{
	std::cout << "Error connecting";
	std::cin.get();
	return 1;
}
parece que no conecta :S,algun error ven?¿
			
			
			
				Nunca le asignas a Cliente lo que devuelve la función socket()...
Cliente = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
			
			
				Hola,que tal,acabo de agregar la linea que me as dicho,el programa enciende,se queda un rato pensando (cosa que no hacia antes) pero alfinal me tira el mismo error :(
			
			
			
				Cual error te tira? 
			
			
			
				Bueno es el erro que e escrito yo en el utlimo "cout" en la funcion "connect"
			
			
			
				Cambia esto:
connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR_IN))
Por esto:
connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR))
			
			
				Hey,acabo de probar,pero nada sigue sin funcionar :( que raro verdad?¿
puede ser algo de mi ordenador?¿ :S
			
			
			
				La verdad no veo el error, pero aquí te dejo mi código que me funcionó:
#include <iostream>
#include <Windows.h>
#pragma comment(lib, "Ws2_32.lib")
#define PUERTO 80
WSADATA wsa;
SOCKET cliente;
sockaddr_in remoto;
int error();
int main(){
	if(WSAStartup(MAKEWORD(2,2), &wsa))
		return error();
	remoto.sin_family = AF_INET;
	remoto.sin_port = htons(PUERTO);
	remoto.sin_addr = *((in_addr*)gethostbyname("www.google.com")->h_addr);
	cliente = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(cliente == INVALID_SOCKET)
		return error();
	if(connect(cliente, (sockaddr*)&remoto, sizeof(sockaddr)))
		return error();
	closesocket(cliente);
	WSACleanup();
	return 0;
}
int error(){
	std::cout << "Error #" << GetLastError() << std::endl;
	WSACleanup();
	getchar();
	return 0;
}
			
			
			
				perfecto el tuyo si funciona,de todas formas me gustaria saber que a pasado con mi codio mas que nada para aprender un poco mas :) unca viene mal sia lguien ve el error sera de agradecer,muchas gracias por el code ^^
			
			
			
				Creo que porque usaste la estructura SOCKADDR_IN y no sockaddr_in no se la verdad no estoy seguro.
			
			
			
				hey,donde pone "google.com" ai e puesto "localhost",i em tira el error 10061 k significa conexion rechazada,por lo visto nop pueod conectar a mi propio host,sabes que puede ser?
			
			
			
				Que raro... si tienes algún servidor a la escucha en el puerto que te estás tratando de conectar debería funcionar.
			
			
			
				Hola de nuevo,que tal,me surio un pequeño problemilla,ya consegui conectar los sockets i enviar datos al servidor,lo que pasa uqe cuando mando un simple "Hola" al llegar al servidor llega como caracteres raros :S no llega el "Hola" llegan cosas como "?$%" o cosas asin.....por que puede ser?¿
			
			
			
				El servidor lo hiciste tu? Si muestras algo de código sería mejor...
			
			
			
				Cliente:
#include "windows.h"
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
#define PORT 9999
WSADATA wsa;
SOCKET Client;
int Conexion;
sockaddr_in Remote_Server;
int Error()
{
	std::cout << "Error " << GetLastError() << std::endl;
	getchar();
	return 0;
}
int main(void)
{
    if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
	{
		Error();
	}
    
	Remote_Server.sin_family = AF_INET;
	Remote_Server.sin_port = htons(PORT);
	Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
	
	Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	Conexion = connect(Client,(sockaddr *)&Remote_Server,sizeof(sockaddr));
	if(Conexion == INVALID_SOCKET)
	{
		Error();
	}
	char *Buffer = (char*)malloc(5);
	send(Client,Buffer,strlen(Buffer),0);
	free(Buffer);
	return 0;
}
Servidor:
#include "windows.h"
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
#define PORT 9999
WSADATA wsa;
SOCKET Client;
int Conexion;
sockaddr_in Remote_Server;
int Error()
{
	std::cout << "Error " << GetLastError() << std::endl;
	getchar();
	return 0;
}
int main(void)
{
    if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
	{
		Error();
	}
    
	Remote_Server.sin_family = AF_INET;
	Remote_Server.sin_port = htons(PORT);
	Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
	
	Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	Conexion = bind(Client,(SOCKADDR*)&Remote_Server,sizeof(Remote_Server));
	listen(Client,10);
	accept(Client,NULL,NULL);
	char *Buffer = (char*)malloc(5);
	while(true)
	{
		recv(Client,Buffer,strlen(Buffer),0);
		if(strcmp(Buffer,"Hola"))
		{
			break;
		}
		
	}
	std::cout << Buffer <<std::endl;
	getchar();
	free(Buffer);
	return 0;
}
los datos se mandan,pero no se ven los caracteres correcamente
			
			
			
				En el cliente nunca le asignas ningún contenido a la variable Buffer, de esta manera:
Cliente:
#include "windows.h"
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
 
#define PORT 9999
 
WSADATA wsa;
SOCKET Client;
int Conexion;
sockaddr_in Remote_Server;
 
int Error()
{
	std::cout << "Error " << GetLastError() << std::endl;
	getchar();
	return 0;
}
 
int main(void)
{
    if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
	{
		Error();
	}
 
	Remote_Server.sin_family = AF_INET;
	Remote_Server.sin_port = htons(PORT);
	Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
 
	Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 
	Conexion = connect(Client,(sockaddr *)&Remote_Server,sizeof(sockaddr));
 
	if(Conexion == INVALID_SOCKET)
	{
		Error();
	}
 
	char buffer[] = "Hola";
	send(Client,buffer,strlen(buffer),0);
 
	return 0;
}
Y lo recibes mal no le puedes hacer strlen() a Buffer
Servidor:
#include "windows.h"
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
 
#define PORT 9999
 
WSADATA wsa;
SOCKET Client;
int Conexion;
sockaddr_in Remote_Server;
 
int Error()
{
	std::cout << "Error " << GetLastError() << std::endl;
	getchar();
	return 0;
}
 
int main(void)
{
    if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
	{
		Error();
	}
 
	Remote_Server.sin_family = AF_INET;
	Remote_Server.sin_port = htons(PORT);
	Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
 
	Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 
	Conexion = bind(Client,(SOCKADDR*)&Remote_Server,sizeof(Remote_Server));
	listen(Client,10);
	accept(Client,NULL,NULL);
	char *Buffer = (char*)malloc(5);
	while(true)
	{
 
		memset(Buffer, 0, 5);
		recv(Client,Buffer,4,0);
		if(!strcmp(Buffer,"Hola"))
		{
			break;
		}
 
	}
	std::cout << Buffer <<std::endl;
	getchar();
	free(Buffer);
	return 0;
}
PD: Recuerda que strcmp() devuelve 0 si las cadenas son iguales.
			
			
			
				Hola,acabo de probar los codigo,pero no recibe nad ale servidor....:S se queda con la pantalla negra
			
			
			
				No me había fijado pero estás aceptando mal la conexión... en la parte donde llamas a la función accept() deberías hacer algo así:
SOCKET nueva_conex;
do{
nueva_conex = accept(Client, NULL,NULL);
}while(nueva_conex == SOCKET_ERROR);
Y en esta parte en el servidor deberías cambiarla así:
Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
por
Remote_Server.sin_addr = INADDR_ANY;
Edit:
Recuerda que cuando llames accept() te devolverá una variable tipo SOCKET que es la nueva conexión que acabas de aceptar y esa variable es la que utilizarás para enviar/recibir los datos.
			
			
			
				Hola,el servidor no me dja poner "Remote_Server.sin_addr = INADDR_ANY;"
me da error en donde esta el "="
ERROR:
error C2679: '=' binario : no se encontró un operador que adopte un operando en la parte derecha de tipo 'u_long'
			
			
			
				Disculpa es así:
Remote_Server.sin_addr.s_addr = INADDR_ANY;
O sino:
Remote_Server.sin_addr.S_un.S_addr = INADDR_ANY;