ローカルマシン上のJavaのUDPクライアントサーバー、クライアントプログラムが応答しない

パワンニルパル:

私は、UDPプロトコルを使用してJavaで基本的なクライアント/サーバーチャットアプリケーションをシミュレートしていますが、問題は、クライアントプログラムがサーバープログラムから送信されたメッセージに応答していないことです。まず、サーバーはクライアントが想定している開始メッセージを送信しますそれぞれのPowerShellターミナルから文字列を読み取り、そのメッセージをサーバープログラムに送信します。コードをデバッグしたところ、サーバープログラムは開始メッセージを送信できたが、クライアントプログラムがターミナルから入力を取得していないことがわかりました。これでわかりますか、これが少しばかげているように聞こえても許してください。しかし、私はコンピュータネットワークのコースの初心者です。(クライアントとサーバーの両方が私のローカルマシンで実行されています)

サーバープログラム

import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.*;



public class ServerUDP {
    private static int SERVERPORT;
    private static int CLIENTPORT;
    private static InetAddress SERVERADDRESS;
    public DatagramSocket ServerSocket;
    public BufferedReader br;
    private int MSGLEN;
    
    void ConnectionSetup() throws Exception{
        SERVERPORT = 3001;
        CLIENTPORT = 3000;
        MSGLEN = 100;
        SERVERADDRESS = InetAddress.getLocalHost();
        br = new BufferedReader(new InputStreamReader(System.in));
        ServerSocket = new DatagramSocket(SERVERPORT);
    }

    void ConnectionClose() throws Exception{
        br.close();
        ServerSocket.close();
    }

    void SendMessage(String mString) throws Exception{
        byte[] BuffToClient = new byte[this.MSGLEN];
        BuffToClient = mString.getBytes();
        DatagramPacket PktToClient = new DatagramPacket(BuffToClient, BuffToClient.length,SERVERADDRESS,CLIENTPORT);
        ServerSocket.send(PktToClient);
    }

    String GetMessage() throws Exception{
        byte[] BuffFromClient = new byte[this.MSGLEN];
        DatagramPacket PktFromClient = new DatagramPacket(BuffFromClient,BuffFromClient.length);
        ServerSocket.receive(PktFromClient);
        BuffFromClient = PktFromClient.getData();
        return new String(BuffFromClient,StandardCharsets.UTF_8);
    }

    void Converse() throws Exception{
        this.SendMessage("Hello Client, How are you?");
        System.out.println("msg sent");
        while(true){
            String CliMsg = this.GetMessage();
            if(CliMsg.equals("bye")){
                this.SendMessage("Ok bye");
                break;
            }else{
                System.out.println("Client Says : "+CliMsg);
                this.SendMessage(br.readLine());
            }
        }
    }

    public static void main(String[] args) throws Exception{
        ServerUDP Server = new ServerUDP();
        Server.ConnectionSetup();
        Server.Converse();
        Server.ConnectionClose();
    }    
}

クライアントプログラム

import java.io.*;
import java.net.InetAddress;
import java.nio.charset.*;
import java.net.*;


public class ClientUDP {
    public static int CLIENTPORT;
    public static int SERVERPORT;
    public InetAddress CLIENTADD;
    public InetAddress SERVERADDRESS;
    public int MSGLEN;
    public static BufferedReader br;
    public DatagramSocket clientSocket;

    void ConnectionSetup() throws Exception{
        CLIENTPORT = 3000;
        SERVERPORT = 3001;
        MSGLEN = 100;
        CLIENTADD = InetAddress.getLocalHost();
        SERVERADDRESS = InetAddress.getLocalHost();
        br = new BufferedReader(new InputStreamReader(System.in));
        clientSocket = new DatagramSocket(CLIENTPORT);
    }

    void ConnectionClose() throws Exception{
        br.close();
        clientSocket.close();
    }

    void SendMessage(String mString) throws Exception{
        byte[] BuffToServer = new byte[this.MSGLEN];
        BuffToServer = mString.getBytes();
        DatagramPacket PktToServer = new DatagramPacket(BuffToServer,BuffToServer.length,CLIENTADD,SERVERPORT);
        clientSocket.send(PktToServer);
    }

    String GetMessage() throws Exception{
        byte[] BuffFromServer = new byte[this.MSGLEN];
        DatagramPacket PktFromServer = new DatagramPacket(BuffFromServer, BuffFromServer.length);
        clientSocket.receive(PktFromServer);
        BuffFromServer = PktFromServer.getData();
        System.out.println("msg recived");
        for(byte b : BuffFromServer){
            System.out.println(b);
        }
        return new String(BuffFromServer,StandardCharsets.UTF_8);
    }

    void Converse() throws Exception{
        System.out.println(this.GetMessage());
        System.out.println("got the msg");
        while(true){
            String MsgToSrvr = br.readLine();
            this.SendMessage(MsgToSrvr);
            System.out.println("Server Says : "+this.GetMessage());
            if(MsgToSrvr.equals("bye")){
                break;
            }
        }
    }

    public static void main(String[] args) throws Exception{
        ClientUDP Client = new ClientUDP();
        Client.ConnectionSetup();
        Client.Converse();
        Client.ConnectionClose();
    }
}

マングスタ:

あなたの問題は、最初にサーバーの電源を入れ、次にクライアントの電源を入れたことだと思います。

最初にクライアントをオンにするclientSocket.receive(PktFromServer);と、サーバーが何かを送信するのを待ってオンラインでブロックします。その後、サーバーをオンにすると、サーバーは起動直後にメッセージを送信し、クライアントはメッセージを受信して​​印刷し、ユーザーがコンソールで何かを印刷するのを待ちます。その間、サーバーはクライアントが何かを送信するのを待ちます。次に、クライアントはサーバーを待機し、サーバーはユーザーを待機します。

ただし、最初にサーバーの電源を入れると、UDPは何かを送信する前に接続を確立する必要がないため、メッセージはどこにも送信されません。その後、サーバーの待機を開始するクライアントをオンにしますが、サーバーからの最初のメッセージが失われたため、クライアントは何も受信しません。そのため、彼らはお互いが何かを送信するのを待ってスタックします。

これがあなたの状況の理由です。クライアントとサーバーが相互にどのように動作するかについては言及しなかったので、ここでは何も提案しません。あなたはそれを指定することができ、私は修正を提案します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavaのUDPクライアントサーバー平均コンピューティングプログラム

分類Dev

Javaクライアントサーバープログラムの奇妙なNullPointerException

分類Dev

シンプルなJavaクライアント/サーバープログラム

分類Dev

SwingGUIを使用したシンプルなクライアントサーバープログラム

分類Dev

Java UDP クライアントがサーバーから受信していない (単純なクライアント サーバーの UDP コード)

分類Dev

クライアント(Pythonプログラム)がサーバー(cプログラム)から応答を受信しませんか?

分類Dev

Hbaseクライアントがローカルのhbaseサーバーに接続しない

分類Dev

クライアントのローカルネットワーク上のファイルにアクセスしますが、Webサーバーからローカルマシンにはアクセスしません

分類Dev

インターネットにアクセスできるローカル サーバーを介して、クラウド上のプライベート仮想マシンからインターネットに接続する必要がある

分類Dev

ブーストdaytime7サーバーの例がnetcatクライアントに応答しない

分類Dev

最終的に例外でブロックがクライアントサーバープログラムで機能しないのはなぜですか?

分類Dev

Haskellサーバーがクライアントに応答しない

分類Dev

クライアントがVPNまたはプロキシを使用しているときにnodejsサーバーが応答しない

分類Dev

ローカルサーバー上のOpenvpnクライアント

分類Dev

単一サーバープログラムのマルチクライアントのソケットを閉じたくない

分類Dev

Nginxプロキシ-アップストリームでUDPデータグラムをバインドしません(不正なUDPチェックサム)

分類Dev

UDPコネクションレス型クライアントの固定ポートでクライアントプログラムを実行する方法-Javaのサーバーペア

分類Dev

ソケットプログラミング-シンプルなクライアント/サーバー

分類Dev

Javaのクライアント/サーバープログラム-ストリーム

分類Dev

単純なRPCサーバーがクライアントの接続時に応答しない

分類Dev

ローカルサーバーと通信しているローカルマシン上のローカルクライアントに、インターネット上のサーバーと通信していると思わせる簡単な方法はありますか?

分類Dev

このjava nioプログラムでクライアントがサーバーに接続できないのはなぜですか?

分類Dev

Javaソケットサーバー-クライアント2ウェイチャットプログラムが予期した結果を取得しない

分類Dev

ローカルサーバーからローカルネットワーク上のクライアントプリンターにアクセスする

分類Dev

マイクロサービスクライアントの確認応答とイベントソーシング

分類Dev

ionicアプローチとwindowsアプローチ間のリアルタイムクライアントサーバーソケットプログラミングのソリューション(asp.mvc、iisなど)

分類Dev

アプリケーションがクライアントのマシンでローカルパスをエラーとしてスローする

分類Dev

トロイの木馬(Cのシンプルなクライアントサーバー)

分類Dev

Python:パンダデータフレームでのマルチプロセッシングエラー:クライアントには、ローカルでピクルスできない重要な状態があります

Related 関連記事

  1. 1

    JavaのUDPクライアントサーバー平均コンピューティングプログラム

  2. 2

    Javaクライアントサーバープログラムの奇妙なNullPointerException

  3. 3

    シンプルなJavaクライアント/サーバープログラム

  4. 4

    SwingGUIを使用したシンプルなクライアントサーバープログラム

  5. 5

    Java UDP クライアントがサーバーから受信していない (単純なクライアント サーバーの UDP コード)

  6. 6

    クライアント(Pythonプログラム)がサーバー(cプログラム)から応答を受信しませんか?

  7. 7

    Hbaseクライアントがローカルのhbaseサーバーに接続しない

  8. 8

    クライアントのローカルネットワーク上のファイルにアクセスしますが、Webサーバーからローカルマシンにはアクセスしません

  9. 9

    インターネットにアクセスできるローカル サーバーを介して、クラウド上のプライベート仮想マシンからインターネットに接続する必要がある

  10. 10

    ブーストdaytime7サーバーの例がnetcatクライアントに応答しない

  11. 11

    最終的に例外でブロックがクライアントサーバープログラムで機能しないのはなぜですか?

  12. 12

    Haskellサーバーがクライアントに応答しない

  13. 13

    クライアントがVPNまたはプロキシを使用しているときにnodejsサーバーが応答しない

  14. 14

    ローカルサーバー上のOpenvpnクライアント

  15. 15

    単一サーバープログラムのマルチクライアントのソケットを閉じたくない

  16. 16

    Nginxプロキシ-アップストリームでUDPデータグラムをバインドしません(不正なUDPチェックサム)

  17. 17

    UDPコネクションレス型クライアントの固定ポートでクライアントプログラムを実行する方法-Javaのサーバーペア

  18. 18

    ソケットプログラミング-シンプルなクライアント/サーバー

  19. 19

    Javaのクライアント/サーバープログラム-ストリーム

  20. 20

    単純なRPCサーバーがクライアントの接続時に応答しない

  21. 21

    ローカルサーバーと通信しているローカルマシン上のローカルクライアントに、インターネット上のサーバーと通信していると思わせる簡単な方法はありますか?

  22. 22

    このjava nioプログラムでクライアントがサーバーに接続できないのはなぜですか?

  23. 23

    Javaソケットサーバー-クライアント2ウェイチャットプログラムが予期した結果を取得しない

  24. 24

    ローカルサーバーからローカルネットワーク上のクライアントプリンターにアクセスする

  25. 25

    マイクロサービスクライアントの確認応答とイベントソーシング

  26. 26

    ionicアプローチとwindowsアプローチ間のリアルタイムクライアントサーバーソケットプログラミングのソリューション(asp.mvc、iisなど)

  27. 27

    アプリケーションがクライアントのマシンでローカルパスをエラーとしてスローする

  28. 28

    トロイの木馬(Cのシンプルなクライアントサーバー)

  29. 29

    Python:パンダデータフレームでのマルチプロセッシングエラー:クライアントには、ローカルでピクルスできない重要な状態があります

ホットタグ

アーカイブ