最近、課題を出され...
「オフィスまたは企業のさまざまな Windows マシンにインストールできる Windows フォーム アプリケーションを開発すること。1 台のマシン (ALPHA マシン) にデータベースが存在します。このデータベースは、他のベータ マシン上のアプリケーションがデータにアクセスするために使用されます。 . アプリケーション自体がアルファ版かベータ版か (データベース ファイルを持っていますか?) をチェックするので、サーバーまたはクライアントとして動作する必要があります。"
ネットワークとアプリケーション間通信の要件を除いて、すべてを行うことができます。それで、私はインターネットを介してソケットプログラミングを学び始め、このリンクをたどりました...
私が取り組んでいるアイデアは...
- クライアントにメッセージをサーバーに送信させる。
- サーバーにこのメッセージを受け入れさせ、このメッセージをキューに入れます。
- メッセージを読んで、クライアントの IP アドレスとそのデータ要求を取得します。
- このリクエストをデータベースに適用し、結果を取得します。
- 結果を文字列に変換します。
- 要求しているクライアントに送信します。
手順 3、4、および 5 を実行できます。1、2、および 6 で行き詰まっています。
これに向けて...
サーバーと、呼び出されたときにソケットを返すクライアント用の関数を作成しました。何年も経ってもコードがきれいで整頓されており、理解しやすいものにしたいので、別の関数を作成します。
以下のコードを確認してください...
サーバー用...
private Socket GetServerReady()
{
IPEndPoint RemoteEP = new IPEndPoint(IPAddress.Any, 8000);
Socket newSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
newSock.Connect(RemoteEP);
newSock.Listen(10);
return (newSock);
}
どこにも Accept() メソッドがないことに気付くでしょう。これは、さらに使用するために以下のように呼び出したいためです...
Socket CltSock = GetServerReady().Accept();
クライアントのコードは...
private Socket GetClientReady()
{
IPEndPoint RemoteEP = new IPEndPoint(IPAddress.Parse(txtBxHost2.Text.Trim()), 8000);
Socket ServerSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ServerSock.Connect(RemoteEP);
return (ServerSock);
}
最後に、質問は....
「上で書いた関数を呼び出すのに適切な場所はどこですか?」
「Form_Load() イベントでサーバー関数とクライアント関数を呼び出す必要がありますか?」
「上記のポイント 1、2、および 6 である私の主な意図に向けた次のステップは何ですか?」
そのままコピーできる完全なコードは期待していません。正しい手順と、概念に関する少しの詳細だけで十分です。
テスト目的で使用する PC は 1 台だけです。また、別の制限は、すべてが単一のアプリケーションでコーディングされることです。クライアントとサーバー用に 2 つの別々のアプリケーションを作成したくありません。
あなたが理解できるようにすべてを明確にしたことを願っています。
どうもありがとう。
応答を待っています。