목표는 udp 프로토콜을 사용하여 네트워크에서 데이터를 수신하는 C++ 프로그램을 작성하는 것입니다. OS - 리눅스. 나는 몇 가지 질문이있다.udp 프로토콜을 사용하여 네트워크에서 데이터를 수신 할 수 없습니다.
- 저는 C++ 프로그램을 작성하기 위해 Linux C 라이브러리를 사용할 수 있는지 확인하고자합니다.
- 어디서나 리눅스에서 소켓을 사용하여 프로그래밍하는 방법을 단계별로 자세히 설명하는 전체 자습서가 있습니까? (나는 네트워크에서 많은 튜토리얼을 알고 있지만 인터넷에서 udp 데이터를 수신하는 데 도움이되는 어떤 것을 찾고 있는데, 같은 장치에있는 다른 프로그램이 아닙니다.).
터미널에서 (tcpdump를 사용하여) 내 컴퓨터가 지정한 포트로 주소가 지정된 udp 패키지를 수신합니다. 나는이 프로그램이 어떤 UDP 패키지를 기다린다 생각 (그리고 그가 그것을받지 않는 이유를 모르겠어) - 어떤 내 프로그램 잘못된 것은 내가
receiveData()
아무 일이 없을 것 호출 할 때이class Connection { private: char * buffer; int bufferSize; int sock; struct sockaddr_in server; struct sockaddr_in other; socklen_t addressLength; public: Connection(string address, int port, int bufferSize); ~Connection(); int reciveData(); }; Connection::Connection(string address, int port, int bufferSize) { this->addressLength = sizeof(this->server); this->sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if(this->sock == -1) { cout << "Socket error!" << endl; exit(1); } memset(&(this->server), 0, sizeof(this->server)); this->server.sin_family = AF_INET; this->server.sin_port = htons(port); this->server.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(this->sock, (sockaddr *) &(this->server), this->addressLength) == -1) { cout << "Bind socket error!" << endl; exit(1); } this->bufferSize = bufferSize; this->buffer = new char[bufferSize]; cout << "Socket created!" << endl; } int Connection::receiveData() { int returned; fflush(stdout); if((returned =recvfrom(this->sock, this->buffer, this->bufferSize, 0, (sockaddr *) &(this->other), &this->addressLength)) == -1) { cout << "Receiving error!" << endl; exit(1); } return returned; }
처럼 보이는.
누군가 나를 udp 서버와 클라이언트 프로그램의 차이점을 설명해 주시겠습니까?
고마워요.
가 작동하지 않습니다 ... –
미안, 문제는 있었다 방화벽. –