クライアント/サーバーシミュレーションアプリケーションを開発しました。クライアントとサーバーを2つの異なるWindows XPマシンにデプロイしました。どういうわけか、クライアントはサーバーにリクエストを送信できません。
私は以下のオプションを試しました:
IPアドレスを使用して、クライアントからサーバーマシンに正常にpingを送信しました。
IPアドレスを使用して、サーバーからクライアントマシンに正常にpingを送信しました。
両方のマシンからnetstatコマンドラインツールをチェックしました。サーバーはLISTENING
モードで、クライアントはSYS_SENT
モード。ただし、送信に使用している外部アドレスは、IPアドレスではなくホスト名です。
クライアントからのホスト名を使用してpingされたサーバーマシンが失敗しました。
サーバーからのホスト名を使用して、クライアントマシンにpingを送信しました。
クライアントがホスト名を使用してサーバーに接続しようとしているときに問題があると感じています。
ホスト名の代わりにIPアドレスを使用するようアプリケーションに強制する方法を教えてください。ホスト名をIPアドレスにマッピングする他の方法はありますか?
クライアントマシンに移動して、次を入力します。
nslookup server.company.com
もちろん、server.company.com
をサーバーの実際のホスト名に置き換えます。
これにより、クライアントが使用しているDNSサーバー(ある場合)と、名前に問題があると考えられるものがわかります。
IPアドレスを使用するようにアプリケーションをforceするには、通常、ホスト名の代わりにIPアドレスを使用するようにアプリケーションを構成します。ホスト名がハードコードされている場合、またはアプリケーションが(他のコメントの1つが示すように)ホスト名をIPアドレスよりも優先して使用することを主張している場合は、おそらく運が悪いでしょう。
ただし、UNIXyシステムでは/etc/resolv.conf
および/etc/hosts
、Windows-yシステムでは ローカルホストファイル など、ほとんどのマシンがホスト名を解決する方法を変更できます。
ホスト名を解決するには、tracertを試してください。 IE IPアドレス8.8.8.8があるので、使用します; tracert 8.8.8.8
これは、ネットワークアーキテクチャの詳細なしに答えることは困難です。調査すべき事項は次のとおりです。
Windows XPには、適切に設定されていない場合、ネットワークトラフィックを妨害するWindowsファイアウォールがあります。管理者権限がある場合、コントロールパネルからWindowsファイアウォールアプレットにアクセスして、Windowsファイアウォールをオフにできます。Windowsファイアウォールをオフにしてアプリケーションが動作する場合、問題はおそらくファイアウォールの設定が原因です。
UDP/IPを使用して通信する複数のPCで実行するアプリケーションがあり、管理者権限を持たないユーザーがアプリケーションをPCで実行できるように実験を行っています。アプリケーションが複数のPC間で通信するには、管理者アカウントを使用してWindowsファイアウォールの設定を変更する必要がありました。
このアプリケーションでは、1台のPCがサーバーとして指定され、他のPCはサーバー/クライアントグループのクライアントであり、同じサブネット上に複数のグループが存在する場合があります。
最初の変更は、Windowsファイアウォールアプレットの[例外]タブの機能を使用して、通信に使用するポートの例外を作成することでした。
ホスト名のルックアップを使用しているため、クライアントはダッシュ付きのニーモニックプレフィックスとそれに続く割り当てられた端末番号(SERVER100-1など)で構成されるコンピューター名を使用して、割り当てられたサーバーを見つけることができます。これにより、割り当てられたクライアントを持つ複数のサーバーが同じサブネット上で共存できます。クライアントはプレフィックスを使用して割り当てられたサーバーのコンピューター名を生成し、ホスト名検索を使用して割り当てられたサーバーのIPアドレスを検出します。
サーバーPCのWindowsファイアウォールでファイルとプリンターの共有サービスポートが有効になっていない限り、コンピューター名([システムのプロパティ]ダイアログの[コンピューター名]タブで割り当てられた)を使用したホスト名検索は機能しません。
そのため、2つの変更を行う必要がありました。(1)通信に使用したポートの例外を設定し、(2)ホスト名検索を許可するために[例外]タブでファイルとプリンターサービスを有効にします。
**編集**
また、これを見つけることもできます Windowsで役立つMicrosoft Knowledge Baseの記事XP networking 。
そして、これを参照してください WindowsでのNETBIOS名前解決に関する記事 。
C関数getaddrinfo()を使用して、数値アドレス(ipv4とipv6の両方)を取得できます。サンプルコードを参照してください here