私の目的は、udp プロトコルを使用してネットワークからデータを受信する C++ プログラムを作成することです。OS - Linux。いくつか質問があります。
- Linux C ライブラリを使用して C++ プログラムを記述できるようにしたいと考えています。
- Linuxでソケットを使用してプログラムする方法を段階的に説明する完全なチュートリアルはどこにありますか? (ネットワークには多くのチュートリアルがあることは知っていますが、同じデバイス上の別のプログラムからではなく、インターネットからudpデータを受信するのに役立つものを探しています。)
端末 (tcpdump を使用) で、コンピューターが指定されたポートにアドレス指定された udp パッケージを受信していることがわかります。このように見える私のプログラムの何が問題になっていますか
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; }
私が呼び出したとき、
receiveData()
何も起こっていません-プログラムはいくつかのudpパッケージを待っていると思います(なぜ彼がそれを受け取らないのかわかりません)。誰かがudpサーバーとクライアントプログラムの違いを説明してもらえますか?
どうもありがとう。