Так что я хочу запустить живой сервер на своем компьютере, чтобы подключиться и получить информацию от кого-то еще. Я думал, что могу позволить другому человеку подключиться к моему ip-адресу на порте, который не используется. Например, если мой гипотетический ip-адрес - 214.231.34.12 и порт 50000, и я открываю соединение и передаю эту информацию кому-то, они могут подключиться к нему и отправить мне информацию через TCP.Как запустить живой сервер win winsock?
Я думал, что я мог бы использовать этот код:
// 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;
}
Но это не удается при связывании соединения. Весь этот материал TCP и winsocket для меня совершенно незначителен, и я не понимаю, как я должен поступить иначе. Я знаю, что этот код еще не получает никакой информации, это просто связь, с которой я пытаюсь работать в данный момент. Разве это не правильный способ установить это?
Привязать() завершается с ошибкой Windows Socket 10049
Это ваш код или вы его откуда-то взяли? – Hayt
Является ли 214.231.34.12 IP вашего ПК или вашего маршрутизатора, который делает NAT? Если вы находитесь за маршрутизатором с NAT, вам необходимо настроить перенаправление портов. Кроме того, не привязывайте ваш сокет к IP-адресу, просто используйте 'INADDR_ANY', это упростит, если есть NAT или ваш IP-изменения. Кроме того, сначала проверьте вашу программу локально. –
Продолжайте читать свою книгу о сокетах. вы достигнете программирования http, а затем, возможно, сможете это сделать. не смешивайте между http и tcp-udp/ip. – Raindrop7