[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