- PR -

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

投稿者投稿内容
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-06-21 09:34
甕星さん、一郎さん、レスありがとうございます。

引用:

一郎さんの書き込み (2004-06-20 23:11) より:
>CとC#の違い・・・
ということは、C#で作ったクライアントとは正しく通信が出来るということですか?
「クライアントがCでサーバーがC#で書かれた」ということが問題のように思われているようですが、クライアントは、正しくプロトコルを実装したサーバーとは正しく通信が出来ることは判っているんですか?
サーバーは、正しくプロトコルを実装したクライアントとは正しく通信出来ることは判っているんですか?

とりあえずTelnetでサーバーに接続して、プロトコルを正しく実装しているか確認してみてはどうです?



C#で作ったクライアントとは正しく通信が出来る

→はい、できています。というか、SDKの非同期クライアント・サーバーの使用例
  をまんまパクっていたりするのです(^^;;;

「クライアントがCでサーバーがC#で書かれた」ということが問題のように思われているようですが、クライアントは、正しくプロトコルを実装したサーバーとは正しく通信が出来ることは判っているんですか?
サーバーは、正しくプロトコルを実装したクライアントとは正しく通信出来ることは判っているんですか?

→原理的な部分への造詣は思いっきり浅いです、はい。
とにかくサンプルを元に一から勉強している状態です。

隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-06-21 10:36
お騒がせしております。半人前です。

引用:

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

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


引用:

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

と言う事は。。。???(この先どう進めるべきでしょう)






この返答、変ですね。
コールバック関数がデリゲート宣言をしなければならないと早とちりして

引用:

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



と言ってしまいました。失礼しました。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-06-21 11:11
半人前です。自己レスです。

while (true)
{
allDone.Reset();

Console.WriteLine("接続待ち状態...");
listener.BeginAccept(new AsyncCallback(AcceptCallback),listener);

// ここで止まったまま ※
allDone.WaitOne();

}

allDoneはManualResetEventのインスタンスです。

WaitOneは、「シグナルを受信するまで現在のスレッドをブロック」とありますので、この動作(※)は
【シグナルの受信を待ったまま、すなわち、データが来ていない】
と判断してしまっていいものでしょうか?
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-06-21 15:57
半人前です。お騒がせしております。

その後の調査で、ちゃんと受信できていることが分かりました。
レスくださりましたみなさん、申し訳ありません。m(_)m

デバッグでプレイクポイントの位置を「(ACCEPT後に行っている)文字列判定の処理」
にセットしたところ、ちゃんとデータが取れている事が分かりました。

すべては私のタコに起因する次第です、失礼しました。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-15 11:20
半人前です。お騒がせします。

件名の件についてアドバイス頂きたく・・。
この組み合わせ(CクライアントとC#サーバ)による通信は、同じPC上では動作
しないのですが、その原因として何が考えられるでしょうか?

何卒よろしくお願いします。




かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-07-15 12:38
引用:

件名の件についてアドバイス頂きたく・・。
この組み合わせ(CクライアントとC#サーバ)による通信は、同じPC上では動作
しないのですが、その原因として何が考えられるでしょうか?



何がどう動かないのですか?
接続できないのですか?
送信しても届かないのですか?
受信できないのですか?

単にIPアドレスが間違っているだけではないですか?
単に、ポート番号が間違っただけではないですか?
単に、サーバーが立ち上がっていなかっただけではないですか?

これだけの情報では、なんともいえません。
もっと詳細な情報を提示してください。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-15 13:42
大変失礼しました。m(_)m

接続自体ができていません。サーバのacceptのところでブレイクポイントを設定して
様子を伺っているのですが全く反応がありません。

ちなみに、クライアント・サーバ双方ともIPアドレスやポートの設定、サーバアプ
リの立ち上がりも問題ありません。

クライアントアプリでは送信時にデータをコンソールにも吐いており、挙動だけ見れ
ば動作している、と判断しています。
クライアントアプリを他のマシンに持っていって動作させると正常に送受信されます。

以上です。

隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-15 17:11
お騒がせしております。半人前です。またやってしまいました。。。(((^^;

クライアントアプリは別な人間が作成しており、仕様が変更(コマンドライン引数で
サーバーのアドレスやポートを指定)されていた事が伝わっておりませんでした。

情けない・・・。

かずくんさんレスありがとうございました。

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