// ソケット通信によるCGIとの連携 // // 2002/ 2/23 宍戸 輝光 import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class cgij extends java.applet.Applet implements ActionListener { TextField tfStr; Button btPost; TextArea taView; Panel pnCtr,pnView; String stAddr="www.sm.rim.or.jp"; String stUrl="http://www.sm.rim.or.jp/~shishido/nph-cgij.cgi"; public void init() { tfStr=new TextField(32); btPost=new Button("Post"); btPost.addActionListener(this); taView=new TextArea(20,48); pnCtr=new Panel(); pnCtr.add(new Label("String")); pnCtr.add(tfStr); pnCtr.add(btPost); pnView=new Panel(); pnView.add(taView); add(pnCtr); add(pnView); } public void actionPerformed(ActionEvent e) { String str; if (e.getSource()==btPost) { // Postボタンクリックイベント taView.setText(send(tfStr.getText())); } } private String send(String stArg) { // CGIにstArgをPOST Socket sock=null; InputStreamReader irStr=null; OutputStream osStr=null; String stReturn=new String(); try { // サーバー接続用ソケットと入出力ストリーム作成 sock=new Socket(stAddr,80); irStr=new InputStreamReader(sock.getInputStream()); osStr=sock.getOutputStream(); } catch(Exception e) { return "Error!"; } String stHead="POST "+stUrl+" HTTP/1.0\n"; stHead+="Content-Length:"+String.valueOf(stArg.length())+"\n\n"; String stSend=new String(stHead+stArg); try { // CGIに文字列をPOST osStr.write(stSend.getBytes()); } catch(Exception e) { return "Error!"; } stReturn="Send:\n"+stSend; boolean bRead=true; StringBuffer sbStr=new StringBuffer(); int s; while (bRead) { // CGIの応答データを受け取る try { s=irStr.read(); // 1文字読み取り if (s==-1) // ストリーム終了 bRead=false; else // 読み込んだ文字を文字バッファに追加 sbStr.append((char)s); } catch(Exception e) { bRead=false; } } stReturn+="\nResv:\n"+sbStr.toString(); return stReturn; } }