アプリ版:「スタンプのみでお礼する」機能のリリースについて

検索したら

struct sockaddr_in from;
socklen_t fromlen = sizeof(from);
recvfrom(s, buf, len, 0, (struct sockaddr *)&from, fromlen);

このやり方で受信側で送信側のIPが取得できるはずなのですが、fromにnullが入っていて、取得できません。fromに送信相手のデータが入っていないわけですが、なぜでしょう。何かが足りていないのだとは思うのですがわかりません。

A 回答 (2件)

この方法は試したことがないので、よくわかりませんが、


こちらは参考になりませんか。
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPIN …

参考URL:http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPIN …
    • good
    • 0

環境が示されてませんが、BSDSocketだと仮定して…



recvfromは
int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
なので
recvfrom(s, buf, len, 0, (struct sockaddr *)&from, fromlen);

recvfrom(s, buf, len, 0, (struct sockaddr *)&from, &fromlen);
かと…

また、戻り値とerrnoの値(defineされたマクロ名のほうがいいけど)を示していただければもっと正確な解答ができると思います。
    • good
    • 0
この回答へのお礼

>recvfrom(s, buf, len, 0, (struct sockaddr *)&from, fromlen);
>は
>recvfrom(s, buf, len, 0, (struct sockaddr *)&from, &fromlen);
>かと…

すいません。質問文が間違っていました。
recvfrom(s, buf, len, 0, (struct sockaddr *)&from, &fromlen);
を使ってしました。

戻り値は受信するたびに変化して(だいたい12~44)、errnoの値は0(つまり正常・・・のはず)でした。
じゃあ何が問題だったかというと、私はIneternet domain stream型通信でプログラムを組んでいました(正確に言うと他の人が作ったのを引継いだのですが)。
間抜けな質問につき合わせてしまって申し訳ありません。mm(__)mm

お礼日時:2002/11/12 15:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!