c++ - pagina - servidor php
Cómo ejecutar un servidor en vivo win winsock? (2)
Así que podría ser una respuesta, pero tal vez tenga que usar otro puerto como sugirió Datenwolf.
Descubrí que no es posible enlazar con la dirección IP de mi ISP. Así que he reenviado el puerto que quiero usar y luego me conecto a la dirección IP de mi computadora, como se menciona aquí:
conectarse a una dirección IP en lugar de localhost?
Intenté eso, así que cambié el ipaddress en el código a:
//Prepare the sockaddr_in structure
server.sin_addr.s_addr = inet_addr("192.168.178.93");
server.sin_family = AF_INET;
server.sin_port = htons(50000);
Y luego cuando me conecto a 214.231.34.12 y al puerto 50000 con telnet, ¡la conexión funciona! Me pregunto si este es un resultado válido.
Así que quiero ejecutar un servidor en vivo en mi PC para conectarme y obtener información de otra persona. Pensé que podía permitir que la otra persona se conectara a mi dirección IP en un puerto que no se usaba. Entonces, por ejemplo, si mi dirección IP hipotética es 214.231.34.12 y el puerto 50000 y abro la conexión y le doy esta información a alguien, pueden conectarse a ella y enviarme información a través de TCP.
Pensé que podría usar este código:
// TCPClient.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#define _WINSOCK_DEPRECATED_NO_WARNINGS
/*
Live Server on port 50000
*/
#include<io.h>
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib") //Winsock Library
int main(int argc, char *argv[])
{
WSADATA wsa;
SOCKET s, new_socket;
struct sockaddr_in server, client;
int c;
char *message;
printf("/nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
return 1;
}
printf("Initialised./n");
//Create a socket
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Could not create socket : %d", WSAGetLastError());
}
printf("Socket created./n");
//Prepare the sockaddr_in structure
server.sin_addr.s_addr = inet_addr("214.231.34.12");
server.sin_family = AF_INET;
server.sin_port = htons(50000);
//Bind
if (bind(s, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR)
{
printf("Bind failed with error code : %d", WSAGetLastError());
exit(EXIT_FAILURE);
}
puts("Bind done");
//Listen to incoming connections
listen(s, 3);
//Accept and incoming connection
puts("Waiting for incoming connections...");
c = sizeof(struct sockaddr_in);
while ((new_socket = accept(s, (struct sockaddr *)&client, &c)) != INVALID_SOCKET)
{
puts("Connection accepted");
//Reply to the client
message = "Hello Client , I have received your connection. But I have to go now, bye/n";
send(new_socket, message, strlen(message), 0);
}
if (new_socket == INVALID_SOCKET)
{
printf("accept failed with error code : %d", WSAGetLastError());
return 1;
}
closesocket(s);
WSACleanup();
return 0;
}
Pero está fallando al enlazar la conexión. Todo este asunto de TCP y de winsocket es totalmente nuevo para mí y no entiendo cómo debería abordar esto de manera diferente. Sé que este código aún no está recibiendo información, es solo la conexión con la que trato de trabajar en este momento. ¿No es esta la manera correcta de configurar esto?
El enlace () falla con el error de socket de Windows 10049
Hay muchos obstáculos para establecer una conexión TCP a través de Internet:
- Internet en sí mismo: conexión defectuosa / inestable, ips dinámicos, etc.
- ISP: tal vez su ISP bloquea algunos puertos o ips
- enrutador: cortafuegos, problemas de cruce NAT, upnp, etc.
- SO: firewall de Windows, antivirus, puerto bloqueado / en uso
- SU APLICACIÓN: tal vez un error de código
Es un nuevo y completo enlace a PC a través de internet, el concepto es el mismo, pero impleméntelo ......