저는 현재 UDP를 사용하여 SFML을위한 네트워크 프로토 타입을 만들고 있습니다. 나는 당신이 서버 또는 클라이언트로 선택할 수있는 응용 프로그램을 만들었습니다. 따라서 대개 응용 프로그램의 인스턴스를 두 개 시작하여 하나는 서버로, 다른 하나는 클라이언트로 만듭니다. 내 로컬 IP 127.0.0.1에 연결 중입니다.SFML로 포트에 UDP 소켓을 바인드하려고 할 때 오류가 발생하는 이유는 무엇입니까?
약 20 분 전에이 EXACT 코드가 작동했으며 아무런 문제가 없었습니다. 아무것도 변경하지 않았지만이 코드는 더 이상 작동하지 않으며 서버에 socket.bind()
을 호출하면 프로그램이 중단됩니다. 클라이언트 측에서 오류가 표시되지 않습니다.
이것은 C++에서 수행됩니다.
누구나 가능한 원인을 알고 있습니까? 내가 아는 한, 항만은 사용 중이 아닙니다.
내 클라이언트 코드 :
void runUdpClient(unsigned short port){
sf::IpAddress server;
do
{
std::cout << "Type the address or name of the server to connect to: ";
std::cin >> server;
} while (server == sf::IpAddress::None);
sf::UdpSocket socket;
sf::Packet clientSendPacket;
std::string packetSendContent = "Packet data from the client";
clientSendPacket << packetSendContent;
if (socket.send(clientSendPacket, server, port) != sf::Socket::Done)
return;
std::cout << "Message sent to the server: \"" << packetSendContent << "\"" << std::endl;
// Maak variabelen
sf::IpAddress sender;
unsigned short senderPort;
sf::Packet clientReceivePacket;
std::string clientReceiveContent;
if (socket.receive(clientReceivePacket, sender, senderPort) != sf::Socket::Done)
return;
clientReceivePacket >> clientReceiveContent;
std::cout << "Message received from " << sender << ": \"" << clientReceiveContent << "\"" << std::endl;
}
내 서버 코드 :
void runUdpServer(unsigned short port){
sf::UdpSocket socket;
if (socket.bind(port) != sf::Socket::Done)
std::cout << "Error binding socket for server";
return;
std::cout << "Server is listening to port " << port << ", waiting for a message... " << std::endl;
sf::Packet serverReceivePacket;
std::string serverReceiveContent;
sf::IpAddress sender;
unsigned short senderPort;
if (socket.receive(serverReceivePacket, sender, senderPort) != sf::Socket::Done)
std::cout << "Error receiving packet for server";
return;
serverReceivePacket >> serverReceiveContent;
std::cout << "Message received from client " << sender << ": \"" << serverReceiveContent << "\"" << std::endl;
sf::Packet serverSendPacket;
std::string serverSendContent = "Packet data from server";
serverSendPacket << serverSendContent;
if (socket.send(serverSendPacket, sender, senderPort) != sf::Socket::Done)
std::cout << "Error sending packet from server";
return;
std::cout << "Message sent to the client: \"" << serverSendContent << "\"" << std::endl;
}
'충돌'을 정의하십시오. 오류가 무엇입니까? – EJP
그냥 반환합니다. 이 부분은 실패하는 부분입니다. if (socket.bind (port)!= sf :: Socket :: Done) std :: cout << "소켓에 소켓을 바인딩하는 중 오류가 발생했습니다"; 반환; – Mick
그래서 오류를 출력하고 그것이 무엇인지 알려주십시오. 아직 유용한 정보가 없습니다. – EJP