그래서 내 PC에서 라이브 서버를 실행하여 다른 사람에게 정보를 연결하고 싶습니다. 다른 사람이 사용하지 않는 포트에서 내 IP 주소에 연결할 수 있다고 생각했습니다. 예를 들어 가상 IP 주소가 214.231.34.12이고 포트 번호가 50000인데 누군가가이 정보를 제공하면 TCP에 연결하여 정보를 보낼 수 있습니다. 라이브 서버를 실행하는 방법 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 물건은 나에게 완전히 새로운 것이고 나는 어떻게 다르게 접근해야하는지 이해하지 못합니다. 나는이 코드가 아직 어떤 정보도받지 못하고 있다는 것을 알고있다. 나는 그 순간에 일하려고하는 연결 일 뿐이다. 이것이 이것을 설정하는 올바른 방법이 아닌가?
바인드()는 윈도우 소켓 오류와 함께 실패 10049
이 코드입니까? 아니면 어딘가에서 가져 왔습니까? – Hayt
214.231.34.12는 NAT를 수행하는 PC 또는 라우터의 IP입니까? NAT가있는 라우터 뒤에 있다면 포트 포워딩을 구성해야합니다. 또한 IP를 소켓에 묶지 말고'INADDR_ANY' 만 사용하면 NAT가 관련되어 있거나 IP가 바뀌면 쉽게 할 수있다. 또한 프로그램을 로컬에서 먼저 테스트하십시오. –
소켓에 관한 책을 계속 읽으십시오. http 프로그래밍에 도달하면 어쩌면 그렇게 할 수있을 것입니다. http와 tcp-udp/ip를 혼용하지 마십시오. – Raindrop7