QA@IT

javaアプレットとPHPの通信

3695 PV

プログラミング初心者です。
現在、javaアプレットから出た結果をphpに送信する方法に悩んでいます。

ほかの参考サイト等を見て自分なりに試行錯誤した結果、
javaアプレットから送られた内容をテキストに書き込むことができました。
しかし送られてきた$_POST["data"];をechoできません。
これはjavaアプレットとPHPの通信が正しく行われていなのでしょうか?
アドバイスなどあればぜひご教授いただきたいと思っております。

ソースは以下のようになっております。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;

public class AppletRunner extends java.applet.Applet implements ActionListener{
 // The method that will be automatically called  when the applet is started
  TextArea tfStr;
    Button btPost;
    TextArea taView;

    Panel pnCtr,pnView;
    public void init()
    {
      tfStr=new TextArea(5,32);

        btPost=new Button("Post");
        btPost.addActionListener(this);

        taView=new TextArea(20,32);

        pnCtr=new Panel();
        pnCtr.add(new Label("String"));
        pnCtr.add(tfStr);
        pnCtr.add(btPost);

        pnView=new Panel();
        pnView.add(taView);

        add(pnCtr);
        add(pnView);
// It is required but does not need anything.
    }


//This method gets called when the applet is terminated
//That's when the user goes to another page or exits the browser.
    public void stop()
    {
    // no actions needed here now.
    }


//The standard method that you have to use to paint things on screen
//This overrides the empty Applet method, you can't called it "display" for example.

    public void paint(Graphics g)
    {
//method to draw text on screen
// String first, then x and y coordinate.
     g.drawString(getMacAddr(),20,20);
     //g.drawString("Hello World",20,40);


    } 
  public String getMacAddr() {
   String macAddr= ""; 
    InetAddress addr;
 try {
  addr = InetAddress.getLocalHost();

        System.out.println(addr.getHostAddress());
        NetworkInterface dir = NetworkInterface.getByInetAddress(addr);
        byte[] dirMac = dir.getHardwareAddress();

        int count=0;
        for (int b:dirMac){
         if (b<0) b=256+b;
         if (b==0) {
               macAddr=macAddr.concat("00"); 
         }
         if (b>0){

          int a=b/16;
          if (a==10) macAddr=macAddr.concat("A");
          else if (a==11) macAddr=macAddr.concat("B");
          else if (a==12) macAddr=macAddr.concat("C");
          else if (a==13) macAddr=macAddr.concat("D");
          else if (a==14) macAddr=macAddr.concat("E");
          else if (a==15) macAddr=macAddr.concat("F");
          else macAddr=macAddr.concat(String.valueOf(a));
             a = (b%16);
          if (a==10) macAddr=macAddr.concat("A");
          else if (a==11) macAddr=macAddr.concat("B");
          else if (a==12) macAddr=macAddr.concat("C");
          else if (a==13) macAddr=macAddr.concat("D");
          else if (a==14) macAddr=macAddr.concat("E");
          else if (a==15) macAddr=macAddr.concat("F");
          else macAddr=macAddr.concat(String.valueOf(a));
         }
         if (count<dirMac.length-1)macAddr=macAddr.concat("-");
         count++;
        }

 } catch (UnknownHostException e) {
  // TODO Auto-generated catch block
  macAddr=e.getMessage();
 } catch (SocketException e) {
  // TODO Auto-generated catch block
  macAddr = e.getMessage();
 }
 return macAddr;
 }

public void actionPerformed(ActionEvent e) {
        String str;

        if (e.getSource()==btPost) { // Postボタンクリックイベント
            //送信(send関数)して画面に結果表示
            taView.setText(send("data="+getMacAddr()));
        }
    }
private String send(String data) { 
        try {
            //送信先URL
            URL url = new URL(getCodeBase(), "sample3.php");
            getAppletContext().showDocument(url);

            //ネットワーク接続
            URLConnection urlCon = url.openConnection();
            urlCon.setDoOutput(true);
            urlCon.setDoInput(true);
            urlCon.setAllowUserInteraction(false);

            //送信処理
            PrintWriter writer = new PrintWriter(urlCon.getOutputStream());
           writer.print(data);
           writer.close();

            //受信処理、文字コード指定など
            BufferedReader mReader = new BufferedReader(
            new InputStreamReader(
            urlCon.getInputStream(), "UTF-8"));
            StringBuffer result = new StringBuffer();
            String temp = mReader.readLine();

            //1行ずつ受信
            while (temp!=null)
            {
                result.append(temp + "\n");
                temp = mReader.readLine();
            }
            mReader.close();
            return result.toString();



         } 
         catch (Exception e) //エラー処理
         {
             e.printStackTrace();
         }
         return "error";

  }
}

<?php
$filename = "log.txt";
$post_data = $_POST["data"];
echo 'MACadder is '.$post_data.'';
print ($post_data);
$fp = fopen($filename, "a");
fwrite($fp, $post_data);
fwrite($fp, "\n");
fclose($fp);

?>

回答

ファイルにかけているならば、phpにはわたっていると思います。
同じ様にpostするhtmlファイルを作成してphpの動作が期待通りか見てみてはどうでしょう。

<html>
<body>
<form action="sample3.php" method="POST">
<input type="text" name="data" />
<input type="submit" value="submit" />
</form>
</body>
</html>

出力されていなければ、

編集 履歴 (0)
  • アドバイスありがとうございます。
    postするhtmlファイルからphpを動作させた結果正しくdataの内容が表示されました。
    やはりjavaapletのほうに問題があるのでしょうか?
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。