07/04/23 01:59:09
>>280
レスありがとうございます。そういう理論ですか。なるほどです。
ネットワークプログラミングとマルチスレッドが、
初心者なので、実際のプログラミングでどうしたら、
良いのかと思いまして。
Bのプログラミングは、もうちょっと細かく見ると
WSAStartup()->socket()->bind()->listen()->accept()->recv()->
B⇔Cのための子子スレッドを呼び出し?
->send()->closesocket()->WSACleanup()
■子スレッドで、_beginthread使っても良いなら、わかりやすくできるんですが、
だめなんですよね?
■WSAStartup()->socket()->bind()->listen()->accept()->recv()->
{B⇔Cの処理 WSAStartup()->socket()->connect()->send()->recv()->WSACleanup()}
->send()->closesocket()->WSACleanup()
スレッド使わないで、WSAStartup()2回呼んだら、どうなるんだろうとか、
一回目のWSACleanup()で、A⇔B,B⇔C、両方の接続切れちゃったりしますよね。
とか、いろいろ疑問で。実験して見ようと思うんですが、頭がごちゃごちゃして
難しいです。
■あとは、はじめからBのプログラミングで、
AがBに接続をして、アクセプトした瞬間に、その親スレッドで、
A⇔B,B⇔Cのやり取りするスレッドを、立ち上げてスレッド間のメッセージで
タイミングをはかる方法があるかもしれないですが、スレッド間のやりとりって、
やったときなくて、難しいです。
うまく説明できず、すみません。的外れなこと言ってるかもしれないです。
2番目と3番目の■について、ここに気をつけるなど、アドバイスいただけないでしょうか。
よろしくお願いします。
282:278
07/04/23 04:08:28
>>281
2番目の■実験してみました。ちょっと違うんですが、
URLリンク(www.geekpage.jp)
こちらのページのプログラムを参考に、させていただき実験してみました。
int main2(int argc, char *argv[]);関数を作成しました。
内容は、
//WSADATA wsaData;
// if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0) {
// printf("WSAStartup failed\n");
// return 1;
// }
// WSACleanup();
●WSAStartup()とWSACleanup()は、一回でいいと思い
にコメントを入れました。この理解合ってますでしょうか?
main()関数の中のsocketclose();のあとに
main2(argc,argv);を呼び出しました。
●すると、同じページが2回表示されました。
この要領で、281も実装すれば大丈夫でしょうか?
283:278
07/04/23 04:16:18
あっ、でもクライアントプログラムでした。
■WSAStartup()->socket()->bind()->listen()->accept()->recv()->
{B⇔Cの処理 socket()->connect()->send()->recv()}
->send()->closesocket()->WSACleanup()
だと、サーバプログラムで、上記のように実験しないとだめですか。
んー、これで動きそうですが、状況作るの難しいです。
眠いので、もうだめです。><
284:デフォルトの名無しさん
07/04/23 16:09:22
プロセス間通信もここでいいんでしょうか?
親プロセスと子プロセスで、1対1のプロセス間通信をしたいです。
状態やエラーも返したいので名前付きパイプにしたいと思います。
しかし、親子が複数作られる場合があり、
当然、パイプの名前をユニークな名前にしなければならないのですが、
Windowハンドルを使えばいいでしょうか?
こういう場合、普通はどんな風にプロセス間通信しますか?
285:デフォルトの名無しさん
07/04/23 17:31:14
C言語にてCGIを作成しています。
作成したCGIプログラムをHTTPで確認しようとすると
「Script Execution Failed」というエラーが表示されてしまいます。
色々調べたところサーバ側ではRedhat7.1という環境でサーバを動作
させており、Linuxで作成したexeファイルしか動作できないようなのです。
(Linux使ってないのでこの辺り大分自信が無いのですが)
これはつまり、VisualC++6.0等のWindows上で動作するコンパイラで作成した
cgiファイルは使えないという事なのでしょうか?
286:デフォルトの名無しさん
07/04/23 18:01:26
>>285
はい、使えません。
287:デフォルトの名無しさん
07/04/23 18:02:41
>>284
無名パイプを継承可能で作成してさらにCreateProcessでハンドルを継承可能にする。
288:285
07/04/23 18:35:48
>>286
SHOCKだ!LINUX使いの人じゃないとCGI作れないんですね。
返答ありがとうございました。
289:284
07/04/23 18:37:13
継承 パイプ CreateProcessでググってみました
URLリンク(www.fides.dti.ne.jp)
このページを参考に作ってみたいと思います。
子プロセス側が無いですが。
290:デフォルトの名無しさん
07/04/24 05:19:32
>>288
ソースコードをLinuxマシンに転送してLinuxマシン上でコンパイルすれ
ばいい。
291:デフォルトの名無しさん
07/04/24 10:46:12
同じインテルだろうからアセンブラで組めばおk。
292:デフォルトの名無しさん
07/04/24 11:32:40
ファイルを転送するプログラムを作っているんですが、
sendに一度に渡すデータサイズはどれぐらいが適正なんでしょうか?
大きめに渡したほうが速く送れると、
どこかで読んだので大きめにしたほうがいいのかと
1MBまでなら渡しても正常に送ってくれるので
今のところ1MBにしています・・・でも、これはさすがに大きすぎるような気がして不安です。
293:デフォルトの名無しさん
07/04/24 11:35:11
OSがサポートする実行ファイルの形式が異なるので
WindowsとLinuxの両者でネイティブ動作する実行ファイルを作るのは不可能。
一般にコンパイル環境と異なるターゲット環境のための実行ファイルを
生成したい場合には、クロスコンパイラというものを使う。
294:デフォルトの名無しさん
07/04/24 17:44:16
wineつかえばいいのに
295:デフォルトの名無しさん
07/04/24 19:51:45
4096byte以上はフラグメントされます。
リングバッファ処理を覚えましょう。
296:デフォルトの名無しさん
07/04/24 21:25:18
>>291-295
アンカーぐらい付けてくれ
297:デフォルトの名無しさん
07/04/25 00:50:12
EDITのウィンドウの文字の大きさを小さくしたいのですが、可能なのでしょうか?