クライアント(Windows)とサーバ(Unix)とSocket通信をするアプリを作っています。処理内容はクライアントのデータファイルをサーバに送信(アップデイト)し、サーバ側でデータを解析し、その結果を印刷するという手順です。
WinSockを使って、送信そのものはうまくいくのですが、サーバでデータを解析し結果を印刷するのに時間がかかり(10秒以上)、その間は送信終了のイベントが発生しません。これはサーバ側での処理を exec関数とwait関数で行っているので、正しい事態なのですが、データの送信が終わったら後はサーバ側で勝手にやって欲しいのです。サーバでの処理を system関数に置換えたり、バックグランド処理にしてもやはり処理が終わるまで送信終了のイベントが発生しません。何かいい方法をお教えください。
No.1
- 回答日時:
もう解決されたかもしれませんが。
>その間は送信終了のイベントが発生しません。
クライアントで、SendCompleteイベントが発生しないということですか?
解決方法として、サーバから応答電文をクライアントに送信するという
ことではどうですか?それくらい考えたわいと怒られそうですが。
この回答への補足
いいえ、解決していません。
送信終了のイベントが発生しないというのは、
Closeイベントが発生しないということです。
もともとこのアプリは、クライアント(Ms-dos)サーバ(Unix)でやりとりしていたのをクライアント側だけWindows用に作り変えています。socket通信のサーバ側のソフトはそのまま利用していて、独自のプロトコル(データのやりとりの手順が決まっているので)でやりとりしている中でサーバ側のCloseはデータ受信後すぐ発行されているのですが、exec関数で実行している処理が終了するまで待っている感じです。
お返事がいただけて嬉しかったです。もう少しいろいろ試してみます。
No.2
- 回答日時:
>信終了のイベントが発生しないというのは、
>Closeイベントが発生しないということです。
どうもWindowsとUnix間通信ではWinSockのCloseイベントは
発生しないようです。
以下のURLの「コラム:WinSock」でも見てください。
参考URL:http://research.nii.ac.jp/~ichiro/lecture/syspro …
この回答への補足
ありがとうございます。
サーバでの処理が終われば Close イベントは発生しているので、問題の多くはサーバ側の処理にあるのだと思います。
「コラム:WinSock」参考にさせていただきます。
これから仕事先に行って試行錯誤をしてみます。
いろいろとありがとうございました。
まだ解決していませんが、データ送信後のホスト側での処理をリモートシェルで行う方法を検討しています。アクセス権の問題など別の問題が発生していますが何とか格闘してみます。
No.3
- 回答日時:
UNIXについては、最低限の知識しかありません。
ですのでよくわかってないのですが。。。
送信は新たなソケットを作成して行ってますよね?
そうすると通常はWinSock1_Closeイベントが発生するように思えるのですが・・・
UNIXで受け専用のロジックでもあるのですか?
この回答への補足
サーバ側(UNIX)では常時ソケットは接続要求を待っています(listen)。クライアント側が接続要求すると受け入れOKなら接続番号を返し(accept)、通信が始まります。通信が完了するとクライアント側が切断要求をだすことにより、サーバ側がこの接続番号のソケットを閉じます。(close)
そのあとクライアント側でWinSock1_Closeイベントが発生します。
データのやり取りだけならこれで問題ないのですが、サーバ側で受信したデータを解析処理したり色々な仕事を非同期で実行しています。だから問題ないはずなのですが、なぜか非同期で実行している仕事が終わるまで、クライアント側のWinSock1_Closeイベントが発生しません。サーバ側のCloseを発行している時刻を調べると受信が終わってすぐ発行しているので、クライアント側ですぐに終われるはずなので、何かWinSockの設定の問題なのか、サーバとクライアントのどちらに問題があるのか、手がかりが見つかりません。途方にくれています。
No.4ベストアンサー
- 回答日時:
なるほどー
うーむ難しいですねー
Winsock1.SendData HogeHoge
DoEvents
とすると、どうですか?
またはサーバーが解析処理に入る前に、DoEventsみたいなものをUNIX側で実行することは無理ですか?
非同期で実行はしているけど、その解析処理が占有しているために、クライアントに届かないなんてことは無いですか?
すいません。かなり推測でお話をさせていただいてます。_(._.)_
この回答への補足
いろいろと一緒に考えてくださってありがとうございます。
サーバ側ではデータの受信後ソケットを閉じているのでそれ以外の処理は思いつきません。それにクライアント側がMS-DOSで作ったアプリは現在運用中ですが、データ送信後すぐに終了しているので、やはりクライアント側の問題かなと思ったり。
それで、
Winsock1.SendData HogeHoge
DoEvents
の、HogeHoge って何ですか?
サーバ側がcloseしてから送信することになるとエラーになると思いますが、
サーバの状況をチェックするために何か送信するのはいいテストだと思います。
クライアント側で、自主的にWinSock1_Close を発行するのは、サーバ側で処理が正常に行われず失敗しました。
でもクライアント側で何かアクションする方向をまだ模索してみたいと思います。
いろいろとありがとうございました。
まだ解決していませんが、データ送信後のホスト側での処理をリモートシェルで行う方法を検討しています。アクセス権の問題など別の問題が発生していますが何とか格闘してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- その他(メールソフト・メールサービス) メールが送信できない 発信側でできる対策 3 2023/05/11 10:22
- その他(コンピューター・テクノロジー) 以下の用語がわかんないので教えてください!!! ①プロトコルの変換をする装置。トランスポート層からア 1 2023/07/05 09:10
- ネットワーク ニフティメールのiPhoneとWin PCでの運用 1 2023/03/30 11:19
- PHP PHP でメールフォームを作成したい 1 2022/05/04 22:28
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- 電車・路線・地下鉄 ITパスポート試験問題 7 2023/01/25 09:51
- その他(クラウドサービス・オンラインストレージ) Onedriveで実現したい事。2台のPC間で。 2 2023/04/10 20:42
- サーバー メールサーバーについて詳しい方、メールサーバーの管理業務経験のある方、教えてください。 3 2022/11/12 18:24
- ノートパソコン ESETの初期インストールの仕方 1 2022/10/14 08:26
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<%@ language="VBScript" %>
-
ASPとCGIの違い
-
CPUを2つ搭載するといいのです...
-
IIS+VBScriptでの処理待ちについて
-
ASP.NET値の受け渡し
-
ASP.NET MVCのAjaxフォーム検証
-
フォーム上で押されたボタンに...
-
三菱GOTの画面切り替えについて
-
ボタンが活性化の場合とは、ボ...
-
遷移元を判定したい!
-
Java-jspの画面入力値保持について
-
リクエストに応じたselectedの...
-
腕時計の時報をならないように...
-
ServletからServletへの値渡し
-
Javascriptのhistory.back()が...
-
「<c:forEach タグが終了し...
-
jspからServletを呼び、元のjsp...
-
Formのデータが欠落することがある
-
webアプリを作ってます。エラー...
-
ASP.NET 画面遷移前の状態を保...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
NetworkStreamからのRead()で、...
-
ASPでDLLの呼び出し
-
ASPとCGIの違い
-
CPUを2つ搭載するといいのです...
-
IIS+VBScriptでの処理待ちについて
-
<%@ language="VBScript" %>
-
Perlで処理の進行状況をユ...
-
Webサービスについて(基になる...
-
一定時間でPostBackさせたい(A...
-
Socket通信で、通信終了のイベ...
-
RedirectとTransferの違い
-
画面サイズ取得について
-
処理終了後、他のプログラムへP...
-
ハウスキープ処理について
-
VC++のHTTP通信
-
ASP.NET MVCのAjaxフォーム検証
-
別のサーバにリクエストを飛ば...
-
PerlからDB接続し、データ登録...
-
3層クライアントサーバとMVCの関係
-
ASP.NET値の受け渡し
おすすめ情報