• ベストアンサー

ソケット通信において、送信相手のIPアドレスの取得の仕方。

検索したら struct sockaddr_in from; socklen_t fromlen = sizeof(from); recvfrom(s, buf, len, 0, (struct sockaddr *)&from, fromlen); このやり方で受信側で送信側のIPが取得できるはずなのですが、fromにnullが入っていて、取得できません。fromに送信相手のデータが入っていないわけですが、なぜでしょう。何かが足りていないのだとは思うのですがわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

この方法は試したことがないので、よくわかりませんが、 こちらは参考になりませんか。 http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/NETWORK/caddr.html

参考URL:
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/NETWORK/caddr.html

その他の回答 (1)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

環境が示されてませんが、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されたマクロ名のほうがいいけど)を示していただければもっと正確な解答ができると思います。

morioka
質問者

お礼

>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

関連するQ&A