- PR -

C(WINSOCK)で書かれたクライアントとC#で書かれたサーバのソケット通信

投稿者投稿内容
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-06-18 17:28
半人前です。

C(WINSOCK)で書かれたクライアントとC#で書いたサーバとの
通信テストを命じられテストを行っているのですが、サーバ側のBeginAccept
がウンともスンとも言ってくれません。

ちなみにポートは間違っていませんし、ちゃんと開いています。
クライアント側からのパケットも投げられている事は確認済みです。

何をどのように調べればいいのか、どなたかお教えください。


隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-06-18 18:16
お世話になっております、半人前です。
CとC#の違いに(動作の確認が取れない)理由があるのだろうか?と推測して
質問しましたが、調査を進めてみると
 C→同期通信の手順で書かれている
 C#→非同期通信の手順で書かれている
という違いも判明しました。

これはもう、動作確認が取れなくて当たり前だと結論づけてもいいものでしょうか?

識者に背中を押して欲しい半人前でした。。。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-06-18 18:39
識者じゃぁないので、半歩下がってコメント

引用:

何をどのように調べればいいのか、どなたかお教えください。


まず一点。BeginAccept()にAsyncCallBackのインスタンスを渡していますか?
渡しているのであれば、デバッガで、コールバックのdelegate関数にブレークポイントをセットして、ちゃんと関数に入ってくれるかどうかを確認すればよいのではないでしょうか?

サーバー:非同期通信、クライアント:同期通信だからといって、動作確認が取れないわけではないと思いますよ。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-06-18 20:25
諸農です。

引用:

 C→同期通信の手順で書かれている
 C#→非同期通信の手順で書かれている
という違いも判明しました。

これはもう、動作確認が取れなくて当たり前だと結論づけてもいいものでしょうか?


サーバー側が非同期で実装されているのは当然だと思います。

無反応という現象はどのようにして確認されましたか?
非同期で別スレッドで起動したメソッドを
トラップできていないって事でしょうか?

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2004-06-20 12:11
出来ないはずは無いので単純なミスだと思われる。
とりあえずパケットキャプチャなどで、Ethernetを流れるフレームを観察して、何が起こっているのか正確に把握しないと話しにならない。推測と試行錯誤で対応していると、時間ばかり過ぎていくよ。
#稀に「プロトコルスタックの相性でダメでした」って事もあるし。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-06-20 23:11
>CとC#の違い・・・
ということは、C#で作ったクライアントとは正しく通信が出来るということですか?
「クライアントがCでサーバーがC#で書かれた」ということが問題のように思われているようですが、クライアントは、正しくプロトコルを実装したサーバーとは正しく通信が出来ることは判っているんですか?
サーバーは、正しくプロトコルを実装したクライアントとは正しく通信出来ることは判っているんですか?

とりあえずTelnetでサーバーに接続して、プロトコルを正しく実装しているか確認してみてはどうです?
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-06-21 09:20
引用:

かずくんさんの書き込み (2004-06-18 18:39) より:
識者じゃぁないので、半歩下がってコメント

引用:

何をどのように調べればいいのか、どなたかお教えください。


まず一点。BeginAccept()にAsyncCallBackのインスタンスを渡していますか?
渡しているのであれば、デバッガで、コールバックのdelegate関数にブレークポイントをセットして、ちゃんと関数に入ってくれるかどうかを確認すればよいのではないでしょうか?

サーバー:非同期通信、クライアント:同期通信だからといって、動作確認が取れないわけではないと思いますよ。





BeginAccept()にAsyncCallBackのインスタンス
 → はい、渡しています。

コールバックのdelegate関数にブレークポイントをセットして、ちゃんと関数に入ってくれるかどうかを確認
 → (delegateではないんですが)コールバック関数の中にブレークポイントをセット
   したところ、コールバック関数内に入ってこない事がわかりました。

と言う事は。。。???(この先どう進めるべきでしょう)
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-06-21 09:26
レスありがとうございます。

引用:

Jubeiさんの書き込み (2004-06-18 20:25) より:
諸農です。

引用:

 C→同期通信の手順で書かれている
 C#→非同期通信の手順で書かれている
という違いも判明しました。

これはもう、動作確認が取れなくて当たり前だと結論づけてもいいものでしょうか?


サーバー側が非同期で実装されているのは当然だと思います。

無反応という現象はどのようにして確認されましたか?
非同期で別スレッドで起動したメソッドを
トラップできていないって事でしょうか?





いえ、そこまで行っていないです
偶然にもかずくんさんが指摘されましたが、BeginAcceptのコールバック関数で止まって
いる状態です

スキルアップ/キャリアアップ(JOB@IT)