[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re[4]: アプレットからのCGI起動について



お世話になっております。押山です。
押山 隆さんに頂いた「[jfriends] Re[3]: アプレットからのCGI起動について」への返事です。

>高橋さん、ありがとうございます。
>
>>  わたしは、以下のようなコードで結果を受けとることに成功して
>>いますが...
>>  クエリーパラメータが必要な時は、"connect2.cgi?name1=value1"
>>のようにすればよいのでは?
>>
>>---------------------------------------------------------------
>>  void buttonControl2_actionPerformed(ActionEvent e) {
>>    try{
>>      URL url = new URL("http://192.168.10.6/ken/cgi-bin/connect2.cgi");
>>      InputStream in = url.openStream();
>>      BufferedReader reader = new BufferedReader(new InputStreamReader(in));
>>      String str;
>
>しかし、まだ通信できません。
>
>どうも、CGIにデータを送れていないみたいです。
>
>ソースを見て気がついたのですが、
>
>      URLConnection uc = u.openConnection();
>
>という行が無かったのですが、これでよろしいのでしょうか?

このメール以降作成していたのですが、やはりできませんでした。

多分、InputStreamReaderでコケていると思います。

また、ソースを付けます。

--- 以下ソースです。 ---

  void buttonControl2_actionPerformed(ActionEvent e) {
    try{
      URL url = new URL("http://192.168.10.6/ken/cgi-bin/connect2.cgi");
      InputStream in = url.openStream();
      BufferedReader reader = new BufferedReader(new InputStreamReader(in));
      String str;
      for(;;)
      {
        str = reader.readLine();
        if( str == null )
          break;
        System.out.print(str);
      }
      reader.close();
    }
    catch(MalformedURLException url_e){
      url_e.printStackTrace();
    }
    catch(IOException io_e){
      io_e.printStackTrace();
    }
  }

--- 以上ソースでした ---

IOExceptionで捕まってしまいます。
また、C言語で作成したCGIのソースも載せます。

--- 以下ソースです ---

#define STRICT
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <stdlib.h>


////////////////////////////////////////
//
//	ソケットを使わないCGI・アプレットの通信
//
void main
	(
	void
	)
{
	char	*buf = NULL, *envp ;
	int	length = 0, ret, received = 0 ;

	envp = getenv ("CONTENT_LENGTH") ;
	if (envp) {
		length = atoi (envp) ;
		if (length > 0) {
			buf = (char*)calloc (length, sizeof (char)) ;
			if (buf) {
#if defined(_WIN32)
				_setmode (fileno (stdin), _O_BINARY) ;
#endif	/* _WIN32 */
				do {
					ret = read (fileno (stdin), buf + received, length - received) ;
					if (ret > 0)	received += ret ;
				} while (length > received && ret > 0) ;
				fclose (stdin) ;
				length = received ;
			}
		}	/* length > 0 */
	}	/* envp */

	free (buf) ;

	_write (fileno (stdout), "1034\n", sizeof (char) * 6) ;
	_close (fileno (stdout)) ;

	return ;
}
--- 以上ソースでした ---

です。

何か悪い所がありましたら、指摘してください。
宜しくお願い致します。

#java関係のメーリングリストなのにCのソースを載せる事をお許しください
m(__)m
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  押山 隆
  E-mail:oshi@xxxxxxxxxx