Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

間違いを指摘してください。

サーバーとアプレットで通信をしたいのですが、どうもうまくいきません。間違いを指摘して欲しいのですが、分かる人いますか?ちなみに実行すると「サーバーに接続できず」と表示します。

Client.java

import java.applet.*;
import java.io.*;
import java.awt.*;
import java.net.*;
import java.awt.event.*;
import javax.swing.*;

public class Client extends JApplet 
{
    //グラフィック類
    JTextField text;
    JButton button;
    JLabel label;

    //イベント
    EventHandler eh;

    //通信関係
    Socket sock;
    InputStream fin;
    OutputStream fout;
    BufferedReader in;
    PrintWriter out;

    //文字列
    String s;

    public void init()
    {
        //通信関係
        sock = null;
        fin = null;
        fout = null;
        in = null;
        out = null;

        text = new JTextField();
        button = new JButton("送信");
        label = new JLabel("受信した文字列");

        Container c = getContentPane();
        c.setLayout(null);

        text.setBounds(30,30,150,20);
        button.setBounds(30,60,150,20);
        label.setBounds(30,90,150,20);

        c.add(text);
        c.add(button);
        c.add(label);

        eh = new EventHandler();
        button.addActionListener(eh);
    }

    class EventHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            try
            {
                if(e.getSource() == button)
                {
                    sock = new Socket("http://localhost:8080/Server",9999);

                    in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                    out = new PrintWriter(sock.getOutputStream(),true);

                    //サーバーに送信
                    out.println("アプレットからサーバーに送信");

                    //サーバーから受信
                    label.setText(in.readLine());
                }
            }
            catch(Exception ee)
            {
                label.setText("サーバーに接続できず");
            }
        }
    }
}

Server.java

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;

public class Server extends HttpServlet
{
    //通信関係
    Socket sock=null;
    PrintWriter out=null;
    BufferedReader in=null;
    ServerSocket sSock;


    //受信する文字列
    String s;

    public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException,IOException
    {
        //ポート9999番で待つ
        sSock=new ServerSocket(9999);

        while(true)
        {
            try
            {
            sock = sSock.accept();

            in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            out = new PrintWriter(sock.getOutputStream(),true);

            //文字列受信
            s = in.readLine();

            //文字列送信
            out.println("サーバーからアプレットへ");

            sock.close();
            in.close();
            out.close();
            }
            catch(Exception e)
            {
            }
        }
    }
}

11

回答

5667

閲覧

11件の回答

評価

0

1. tomcatはセットアップしましたか。
2. tomcatのトップページは表示できますか。
3. tomcatで/ServerがServerになるように、マッピングしましたか。

評価

0

1.インストールした。
2.はい。localhost:8080で、Client.classが起動する。
3.マッピングの意味はよく分かりませんが、
http://www.javaroad.jp/opensource/js_tomcat2.htm
はServer.classにすると
http://localhost:8080/Server
で接続できます。

お願いします。

評価

0

>sock = new Socket("http://localhost:8080/Server",9999);
第一引数がおかしいです。

評価

0

8080取りましたがやっぱりできません。
他におかしいところはないですか?

評価

0

第一引数に何を指定するのか、ちゃんと調べてください。

評価

0

http://取りましたがやっぱりできません。
他におかしいところはないですか?

評価

0

localhost/Serverになっているということですか?
それなら、まだ理解していません。

評価

0

localhost/Serverに接続はどうやってしますか?

評価

0

>//ポート9999番で待つ
>sSock=new ServerSocket(9999);
サーバ側で9999番ポートが勝手に接続されます。

評価

0

sock = new Socket("localhost",9999);に変更
サーバー側のwhile{}を削除

まだ動きません。送信するとボタンを押した状態で固まります。
他におかしなところはないですか?

評価

0

よーく眺めていくと…。
サーブレットを作りたいのではなく、サーバプログラムを作りたいんですよね?
私もあまりソースを眺めないでレスしていたのがいけないんですが。

サーブレットは、80番ポートや8080番ポート(設定による)で待っているサーバから呼ばれるものです。
今回のように、独自のポートで待つサーバの場合は、サーブレットではありません。

どうも根本的に、仕組みを理解できていなさそうなので…。

http://ysserve.int-univ.com/sugsi/Lecture/java/L5/05-03-02.html

検索すればいろいろ出てきますが、このあたりはどうでしょうか。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。