2

私はJavaを取り上げようとしています.これは私の2日目です. 以前に作成したサーバーに接続するチャット クライアントを作成しています (C で記述されています)。outTextAreaクライアント プログラムは、 、inTextArea、および を持つように設定されていますsendButton(かなり基本的なものですが、それでも基本を理解する必要があります)。現在開いているプログラムを開いたときに、チャットクライアントがソケットを開くようにしますmain(接続情報は非表示):

    Socket sock = new Socket("theServer", 0000);

プログラムが正しく接続され、開いたままになっていることはわかっています.IPがサーバーに接続するとサーバーの現在の出力が表示され、接続が閉じられるとセグメント障害が発生します。

outTextAreaここに問題があります:をクリックしたときに、そのソケットを介して入力された文字列を送信しようとしていますsendButton:

public void send(String outbuffer) throws Exception {
   sendButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                sendMessage sender = new sendMessage();
                sender.send(outTextArea.getText());
        }
});

sendMessage クラス:

System.out.println(outbuffer);
PrintStream printer = new PrintStream(sock.getOutputStream());
printer.println(outbuffer);

ここで、クラスsockで作成された を送信できないことに気付きました。main

毎回新しい接続を作成する必要なくメッセージを送信する別の方法がある場合、作成されたソケットにどのようにアクセスできるかについて興味があります。どんなアドバイスでも大歓迎です、ありがとう。

4

2 に答える 2

1

基本的な方法は 2 つあります。ソケットを、ソケットとそれを使用するメソッドの両方を含むクラスのインスタンス変数にするか、呼び出し元がソケットをメソッドに渡すことができます。後者の場合、メソッドには現在の String に加えて 2 番目のパラメーターがあります。他の可能性もありますが、これらのいずれかがあなたのケースに最も適しているはずです。

私も意見を述べるかもしれませんが、変数のスコープとパラメーターの受け渡しについてまだ理解している人にとって、ソケットプログラミングは少し進んでいるようです。ネットワークの問題のトラブルシューティングを試みる前に、基本をよりよく理解するために、より単純なことを試みることができます。

于 2013-06-06T19:46:17.063 に答える