プロジェクトでは、毎秒UDPブロードキャストを87.255.255.255に、ポート4448をmyプロジェクトの値で送信する必要があります。私はC++でいくつかのコードを書かれているが、私は常にエラーました:!C++ UDPブロードキャストを送信
アサーション `::バインド(S、(のsockaddr *)& si_me、はsizeof(のsockaddrを))= - 1' はこれで
を失敗しましたライン:
//assert(::bind(s, (sockaddr *)&si_me, sizeof(sockaddr))!=-1);
私は、この行にコードの実行を削除しますが、私はWiresharkの上で何を見つけることはありません。
誰かがブロードキャスト送信者を構築するための解決策や追加情報がありますか?
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <assert.h>
#include <string.h>
#include <ctime>
int main(int argc, char const *argv[]) {
sockaddr_in si_me, si_other;
int s;
printf("Making socket\n");
assert((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))!=-1);
fprintf(stderr,"usage %s hostname port\n", argv[0]);
int port=4448;
int broadcast=1;
setsockopt(s, SOL_SOCKET, SO_BROADCAST,
&broadcast, sizeof broadcast);
memset(&si_me, 0, sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(port);
si_me.sin_addr.s_addr = INADDR_ANY;
assert(::bind(s, (sockaddr *)&si_me, sizeof(sockaddr))!=-1);
while(1)
{
printf("Send message to broadcast\n");
char buf[10000];
strcpy(buf, "test for wireshark");
unsigned slen=sizeof(sockaddr);
send(s, buf, sizeof(buf)-1, 0);
//recvfrom(s, buf, sizeof(buf)-1, 0, (sockaddr *)&si_other, &slen);
printf("recv: %s\n", buf);
sleep(1);
}
}
'assert()'に関数をラップするのは悪い考えです。なぜなら、デバッグがオフになったときにそれらが削除されるからです。 _asserting_の代わりに 'perror()'を呼び出すと、なぜそれが失敗しているのかを知ることができます。 –
私はそれをperrorに変更しようとしましたが、エラーが出ました: 'bool'を 'const char *'に '1'を 'void perror(const char *)'に変換できません。 – josejos41
'if(bind(...) –