ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.net
主にソケットに関しての質疑応答スレッドです。
Programming UNIX Socket FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
関連リンクは>>2-10辺り
足りなかったら適当に付け足してね
前スレ
ネットワークプログラミング相談室 Port28
http://toro.2ch.net/test/read.cgi/tech/1334736934/
ネットワークプログラミング相談室 Port29
http://peace.2ch.net/test/read.cgi/tech/1351670708/
関連スレ
ネットワークプログラミング雑談
http://toro.2ch.net/test/read.cgi/tech/1235800707/ C#のSocketを使って一度の接続で複数の特定長バイト配列を受信するプログラムを考えています。
接続はTcpListener.AcceptTcpClientAsyncで接続要求を受け取るとして、バイト配列の受信を複数回行うには
PollやSelectメソッドを使って無限ループで受信判定して監視するのが一般的でしょうか? GetStreamでストリームを取得して好きにすればいいんじゃないの
TCP自体ストリームだから特定長受信したいと思ったって一度で受信できるかは
わからんよ。ストリームとして正しく固定長受信処理をしたほうがいい。 送信側が "123456" と1回で send しても
受信側は "12" "3456" と複数回の recv に分断されることだってある
ストリームってそういうもん ありがとうございます。
NetworkStream.ReadAsyncメソッドあたりを使って受信します。 教えてください。OSはLinuxです。
ローカルホスト環境ですが、Apacheのドキュメントルートに入れたHTMLファイルを、
ソケットプログラミングから閲覧する方法が分からないです。
inet_addr("127.0.0.1");
ではダメなのでしょうか? 単に"http"というものわかっていないのか
それともvhostの関係で指定が足りないのか
それ以前に http://127.0.0.1/ やhttp://localhost/ で見れるのかどうか struct hostent *host;
っていう構造体が事前に用意されてるという理解でよろしいですか?(まだ未確認) >>652
いちおう、手元のパソコンで一般のWebブラウザ(FirefoxやChrome)を使えば、
自分のパソコンからローカルホストのページや自作htmlを
見に行ける状態には、なっています。 gethostname() と gethostbyname() の違いが分からない。
最初「gethostbyname」を使ったんだけど、
警告: implicit declaration of function ‘gethostbyname’; did you mean ‘gethostname’?
って出てしまう。 libcurl使ったら?サンプルをちょっといじるくらいでできるよ。
とても自力でソケットプログラミングできるようには。。。 getaddrinfo ってのを使わないとダメなの?
とりあえず、疑問には答えてほしいと思う。
gethostname() と gethostbyname() に名前以外に違いはあるの? RTFMなんだが,,
gethostname(3)は自分のホスト名を返す
gethostbyname(3)は引数で与えたホストの情報を返す(IPv4)
getaddrinfo(3)はIPv4,v6両方対応. >>660
了解。
gethostbyname と gethostname は違うんですね。 >>660
マニュアルを読んでも経緯が分からないから聞いています。
警告: implicit declaration of function ‘gethostbyname’; did you mean ‘gethostname’?
と表示される理由は関数の仕様を見ても書いてないですし。 それ調べるなら警告を出しているコンパイラのマニュアルの方だろうが、
gethostbynameを宣言してるヘッダをincludeしてないんじゃね? man見りゃ書いてあるだろ。
includeがその通りになってないんだよ。
そこにたどり着けない時点でやってることがスキルに対して
背伸びしすぎ。 man 3 gethostbyname すると
#include <netdb.h>
ってSYNOPSISの最初にあるでしょ.
このレベルを知らずにCでプログラム書こうと思う時点で,
コアラ大将のTCP/IP入門でも読んで出直しておいで,
とおもってしまう. >>666
それならインクルードしてある。
原因は判明して、単にプログラムにエラーがあっただけっぽい。
コンパイラが気をきかして、 gethostname の警告を出してただけっぽい。
struct hostent *host;
host = gethostbyname("localhost");
printf("正式名: %s\n", host->h_name);
printf("別名 : %s\n", host->h_aliases[0]);
で動くようになった。
ここから先が分からない。
ためしに
host = gethostbyname("localhost/dample.html");
とやってもダメだったし。 無能すぎてlibcurl使うのすら無理そうだから、
system関数でcurlを呼んで、ファイル入力から読んだほうがいいよ。
1000m走ったことない人がフルマラソンに挑むくらい無謀だよ。
お前の知能と知識レベルでは無理。 >>668
どういう開発手法がいいかは聞いていません。
apacheのローカルホストにあるhtmlにソケットプログラミングでアクセスする方法について聞いています。
もし説明が長くなるなら、原理の要点だけでもいいので、質問している事に解答してください。 IT掲示板群 ttp://x0000.net/forum.aspx?id=15
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0 >>670
初心者の質問に解答しないなら、なんで掲示板にいるんですか?
少なくとも、私がいま質問してる事は、市販の書籍には書いてない内容ですよ?
市販の理工書の専門書を読んでも、TCP/IP一般の解説書は売ってても、それをどうソケットプログラミングするかの書籍は、
いまは絶版・休刊ですよね?(2001年頃には売ってましたが、いまは無いです)
それすらも、あらかじめネットのブログを読みあさってから質問しないといけないんですか? わからないところ一箇所二箇所質問するくらいならいいけど、この調子だと
目的を達成できるまで何十回質問することになるやら。 >>672
>それすらも、あらかじめネットのブログを読みあさってから質問しないといけないんですか?
そうだよ。わかってるじゃん。 >>672
中古本や電子書籍なら、古い本も購入できるのかもしれませんが、
その場合でもバージョン違いが生じるので、現在のOSにはそのままでは適用できないので、
結局、ネットのマニュアルに頼るか、ネットの掲示板で先人に聞くしかないと思います。
ネットの公式マニュアルでは、全体像や経緯が分かりません。すでにある程度わかっている人が、細かい仕様を確認する場合にしか、使えません。
2001年ぐらいとは状況が違い、いまは出版市場にC言語ソケットプログラミングの書籍はありません(これはアマゾンで以前に調べました)。 >>675
> 2001年ぐらいとは状況が違い、いまは出版市場にC言語ソケットプログラミングの書籍はありません(これはアマゾンで以前に調べました)。
その代わり、ネットにくさるほど情報が転がってる 2001年くらいから何も変わってないから、
200X年の本を買って読むといいよ。
アマゾンで調べたら複数の書籍が選べるから
好きなのから読めよ。
だいたいあんたの使ってるC言語もC11やC17じゃなくてC99なんだろ? >>673
何十回も質問されて、何が嫌なんですか?
よく分かりません。
「同じことを質問されたら嫌」なら分かりますが?
出版市場にソケットの解説書が無い以上、
掲示板のソケット関連のスレは質問される運命にあると思います。
(それが嫌なら、本を出版してください。) べつに質問するのは勝手だよ?答える気が無くなるというだけで。
あとはまぁ、誰にも相手にされなくなったからといって荒らし化するのは勘弁。 > (それが嫌なら、本を出版してください。)
こんなこと言い出す奴の相手するなよ… >>678
あっちのスレではWinSockなのに
環境はLinux? エラー処理も知らない度素人なんだら虐めるなよ(爆笑)RFCを調べて見る(大爆笑) 相手するから居着くんだろ
優しくしちゃいかん相手かどうかも見分けられない奴が
中途半端に書くんじゃないよ >>667
うーーーん
>ためしに
>host = gethostbyname("localhost/dample.html");
>とやってもダメだったし。
この時点でsocketプログラムの流れとか関数の意味が理解できていないことは
わかるんだけんど、みんなが言うとおり親切に説明してくれているページとか
読んでもう少し基礎知識付けた方が良いと思うよ
たとえば
https://www.geekpage.jp/programming/linux-network/
なんかは割りと親切に書いてあってサンプルも載っているし
あ、LinuxじゃなくてWindowsでVSだとか言われるとまた話がややこしくなるけど
ここにそのものズバリHTTPのクライアントサンプルとかも載っているんで
読んでみたらどうかな >>684
メアド送って二人でやってくんないかなあ 場外の人間に限って「外野が喚く事ではない」というね 相談でもなんでもないけど落とし穴に落ちたんで聞いとくれ(落とし穴というより自損事故)
ローカルサーバ(いや、ローカルでなくても起こるか)で、間違ったURLだったときにリダイレクトしてるんだ
んで、リダイレクト先のURLまちがえた…
それも301でリダイレクトしちゃってた テヘ 笑いどころはどこ?
ブラウザ側でToo many redirectsで止まるだろ? >>693
自分にリダイレクトじゃなく、誤URLに永続的リダイレクトだよ
ブラウザによるかもしれないけど、301が返るとリダイレクト先を記憶
そのアドレスへのアクセスはブラウザ内でリダイレクト先に書き換えられる
結果としてブラウザ側でのリセットが必要 ああ、chromeだな。
いきなり301を返すようにするのをやめたほうがいいぞ。
307あたりで試してから恒久対処なら301にするといい。 だから、それも含めてミスったって言ってるんだろ
アホかよ >>695
すごいな、一発でブラウザ特定されたw
ブラウザの特性って頭に叩き込まれてるのか
あ、じゃ質問
デカイサイズのチャンクでのレスポンスを返した時に、chromeとedgeがコネクションを切断するんで、書き込みがWSAECONNABORTED(10053)でエラーになるんだ
試した中ではfirefoxだけ問題ないんだけど、
レスポンスの実装を失敗していてfirefoxがザルなのかな? ちなみにvideoタグからのgetでサイズは21MBほど
動画はどのブラウザでも問題なく再生される [NGID:of4pwmcJ]>>/dev/null >>702
何様も何も、ここって本来は質疑応答スレだから>>1
であるなら、ブラウザの特性に詳しそうな人がいたら、質問を投げるのは普通じゃないかと
フレンドリーな書き方が気に障ったならご免なさい
教えろとか強要しないからセーフだと思ったんだ socketと主張するつもりかも知れないがスレチ
httpプロトコルの話ならweb板がふさわしい webクライアントの話、アプリの話、関係ない、クロームのスレへ行け >>697
コネクションを切断することが正しいかという話ならsocketの話じゃないから
ここで聞いてもダメかな
cromeとedgeがコネクションを切断すると「WSAECONNABORTED」になるのが
問題ならば、コネクションを切断しにきているのを知らせるエラーが返ってきて
いるってことなのでエラーハンドラを書きましょうって話かな >>707
そうなのですか
コネクションを切断してくるのは相手なので、レスポンスのヘッダに何か特定の指定が必要なのかと
送信データが残っているのにブラウザがチャンク受信を打ち切って切断する
というHTTPプロトコル上の問題だと思っていました
で、プロトコルならばネットワークプログラミングの範疇だとばかり
エラーハンドリングは入っているのですが、一々ログに出てしまっていて、対処できるならばしたいという理由でした 意味不明なローカールサーバのことを聞かれても分からんわw ローカル内部だとインターネット層を通さないだろ?
だからネットワークプログラミング的にはローカルと非ローカルのどちらであるのかってのは、問題を考えてもらう上で意味を持った条件だと判断したんだよ あ、いやここで最初に書いたときはリダイレクトで掘った墓穴ネタだったから無駄な情報だった! >問題を考えてもらう上で意味を持った条件
宿題は自分でやろうな? >>710
ローカル通信でも、AF_INETのソケットを使った通信ならば
きちんとソケットからプロトコルスタックに出力されて、
経路を引いた上で、ローカルの場合はループバックに出力し帰ってきて、
自分自身の別のソケットで受信する。
即ち正しくインターネット層の通信が行われる。 >>717
えっ、知らなかったありがとう
インタフェース層以前でバイパスされるんだと思い込んでた 708
710
718
並べると面白いな
自分でhttpって言いながらバイパスされるとか痴呆疑い有り >>708
プロトコルはネットワークじゃないとか原理主義者どもにはすまんが(煽り)
URLを叩いてファイルとしてダウンロードするとエラーにはならずファイルは一致
ということは送信側ではなくchromeとedgeのvideoタグの実装がどこかおかしい
ウィルス対策ソフトが何か悪さしてる可能性はダウンロードが成功することからかなり低い 三菱電機とかNECはウイルス対策ソフトが悪さをしたので
防衛情報をお漏らししちゃったのにね SMTPサーバでメールを送ろうとしています
YahooメールのSMTPサーバのホストはsmtp.mail.yahoo.co.jpですが
MXレコードで調べるとmx1.mail.yahoo.co.jpとなっています
MXレコードからSMTPサーバのホストを調べるにはどうやればいいですか? すいません、そんなこともわからない人は
SMTPなんて触らないでください。 ほんそれ
っていうかいちいちyahooのSMTPにアクセスするな
そのまま自分の所のSMTP鯖使え
自分がyahooと契約してるって話ならyahooの指示に従え MXレコードで回答されるホストではSMTP動いていないみたいだよ
昔と違ってSMTPで送りつけるとなんでも転送する仕組みではなくなっているので
メールサーバを構築して運用するならばそこら辺から調べないと出来ないよ >>728
OB25くらい理解してからレスしてほしいです。 OSCで複数のパスに複数のデータを送信するのって、処理負荷重くなりますか?
send("/aaa",111)
send("/bbb",222)
send("/ccc",333)
....
みたいなのを1秒間に3000回とか送信するより
send("/json","[111,222,333.....]")
みたいに一回に分けて送信する方が、送信側の端末での処理負荷は軽い気がするのですがどうなのでしょうか? >>731
重いからHTTP2が出てきた、と理解してる 要求順に処理される必然があるからHTTPパイプラインでいいんじゃない。 UDPでも保証されると思っているのか
TCPでも保証されないと思っているのか
そしてどこにwをつける要素があるのか
そしてそして、どこが他人を素人呼ばわり出来るほどのプロフェッショナルなのか UDPでパケットを投げた順に処理してもらうには
ペイロード中にそれなりの細工が必要なんだけど
その工夫はなされてる前提なの?