68user's page 掲示板

Prev< No. 3777〜3799> Next  [最新発言に戻る] [過去ログ一覧]
No. 3777 # TSURU 2004/06/14 (月) 17:21:18
>>3776 yoko

こんばんは。

rm -r <ディレクトリ名>

で削除できませんか?

No. 3778 # den 2004/06/14 (月) 21:42:32
ソースを載せます。

//***************************************************************
// From the book "Win32 System Services: The Heart of Windows 95
// and Windows NT"
// by Marshall Brain
// Published by Prentice Hall
//
// Copyright 1995, by Prentice Hall.
//
// This code implements a TCP sender.
//***************************************************************

// ssipsend.cpp

#include <windows.h>
#include <iostream.h>
#include <winsock.h>

#define NO_FLAGS_SET 0

#define PORT (u_short) 8080
#define DEST_IP_ADDR "127.0.0.1"

#define MAXBUFLEN 256

INT main(VOID)
{
    WSADATA Data;
    SOCKADDR_IN destSockAddr;
    SOCKET destSocket;
    unsigned long destAddr;
    int status;
    int numsnt;
    char toSendtxt[3][256];

    int numrcv;
    char buffer[MAXBUFLEN];

    strcpy( toSendtxt[0], "GET http://localhost:8080/example00/HitTime?userid=1207&date=20004/06/11%2008:30:00 HTTP/1.1\r\n" );
    strcpy( toSendtxt[1], "Host: localhost:8080\r\n" );
    strcpy( toSendtxt[2], "\r\n" );

    /* initialize the Windows Socket DLL */
    status=WSAStartup(MAKEWORD(1, 1), &Data);
    if (status != 0)
        cerr << "ERROR: WSAStartup unsuccessful"
            << endl;

    /* convert IP address into in_addr form */
    destAddr=inet_addr(DEST_IP_ADDR);
    /* copy destAddr into sockaddr_in structure */
    memcpy(&destSockAddr.sin_addr,
        &destAddr, sizeof(destAddr));
    /* specify the port portion of the address */
    destSockAddr.sin_port=htons(PORT);
    /* specify the address family as Internet */
    destSockAddr.sin_family=AF_INET;

    /* create a socket */
    destSocket=socket(AF_INET, SOCK_STREAM, 0);
    if (destSocket == INVALID_SOCKET)
    {
        cerr << "ERROR: socket unsuccessful" << endl;
        status=WSACleanup();
        if (status == SOCKET_ERROR)
            cerr << "ERROR: WSACleanup unsuccessful"
                << endl;
        return(1);
    }

    cout << "Trying to connect to IP Address: "
        << DEST_IP_ADDR << endl;

    /* connect to the server */
    status=connect(destSocket,
        (LPSOCKADDR) &destSockAddr,
        sizeof(destSockAddr));
    if (status == SOCKET_ERROR)
    {
        cerr << "ERROR: connect unsuccessful" << endl;
        status=closesocket(destSocket);
        if (status == SOCKET_ERROR)
            cerr << "ERROR: closesocket unsuccessful"
                << endl;
        status=WSACleanup();
        if (status == SOCKET_ERROR)
            cerr << "ERROR: WSACleanup unsuccessful"
                << endl;
        return(1);
    }

    cout << "Connected..." << endl;

    int idx = 0;
    while(1)
    {
    Sleep(1000);
        cout << "Sending..." << endl;
        numsnt=send(destSocket, toSendtxt[idx],
            strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET);
        if (numsnt != (int)strlen(toSendtxt[idx]) + 1)
        {
            cout << "Connection terminated" << endl;
            status=closesocket(destSocket);
            if (status == SOCKET_ERROR)
                cerr << "ERROR: closesocket unsuccessful"
                    << endl;
            status=WSACleanup();
            if (status == SOCKET_ERROR)
                cerr << "ERROR: WSACleanup unsuccessful"
                    << endl;
            return(1);
        }
    idx++;
    if(idx>2){
        break;
    }

    /* Wait before sending the message again */
    //Sleep(4800);
    } /* while */

    return 0;
}

それほど難しいことはしていないはずなのですが...
よろしくお願いします。

No. 3779 # TSURU 2004/06/14 (月) 23:20:59
>> 3771
Servletって、JavaのServletのことですよね?
なぜ、わざわざCのプログラムからServletを起動する必要があるのですか?
そこが分かりません。

No. 3780 # とーりすがり 2004/06/15 (火) 00:03:33
>>3776 yoko
ディレクトリを作成した時にディレクトリ名にスペースとか
コントロールコード(^hとか)が入ってしまったってことはないですか?

とりあえず そのディレクトリ上位の階層でls -l > hoge.lst
としてvi hoge.lst を表示もしくはod -x hoge.lstあたりで
確認されてみてはいかがでしょうか?
外してしたらスミマセン
  

No. 3781 # den 2004/06/15 (火) 08:41:41
>> 3779 TSURU

なぜ、わざわざといわれるとどう答えていいのかわからないのですが。
サーブレットは、起動されるとデータベースに時刻を登録するようにできています。
それでタイムカードのように出社時間と退社時間を記録してゆこうとしているのです。
そのときにわざわざブラウザを立ち上げてフォームのボタンを押してサーブレットを
起動するのは面倒らしいので、スタートアップにEXEをと登録して、
パソコンが起動するとサーブレットを呼び出すようにしようとしています。

という回答でよいでしょうか。
よろしくお願いします。

No. 3782 # den 2004/06/15 (火) 08:44:36
>> 3779 TSURU

ちなみになぜ、Cでやろうとしているかというと、Java だと各パソコンに
JREをインストールしてやらなければならないかなと思っているので
それが面倒なのでCを使おうとしています。

No. 3783 # 68user 2004/06/15 (火) 11:49:45
>>3775 kiyo
> dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか?
FreeBSD の date は 1900 年まででした。他の OS でも、time_t の仕組みに
のっけているなら、同じでしょうね。てゆーか OS 名くらい書きましょうね。

>>3776 yoko
> Solaris(UNIX)でフォルダの削除が行えません。
ファイルの特定方法もいろいろあるので参考にしてください。
    http://www.jp.freebsd.org/QandA/HTML/1671.html

>>3778 den
> ソースを載せます。
どこでどういうふうにエラーになるんですか? 「うまく起動しません」
とはどういう意味ですか? OS は? ブラウザで該当 URL を見ると正しく
記録されるのですか?

…などという点が情報不足なのですよ。期待した結果と実際の結果を書けと
    http://www.hyuki.com/writing/techask.html
にもあったはずです。

ソースをざっと見た感じでは怪しげなところはないように見えますが、
わたしの手元に Windows 開発環境がなくコンパイルできないので、
どなたかコンパイルして検証できる環境をお持ちの方がいらっしゃい
ましたらよろしくお願いします。

>>3779 TSURU
> なぜ、わざわざCのプログラムからServletを起動する必要があるのですか?
C で HTTP クライアントを作るって話なので、別に変ではないです。

No. 3784 # den 2004/06/15 (火) 13:24:16
OS は、クライアント、サーバともに Windows 2000 Professtional 又は Windows XP Professtional です。
Tomcat は、Tomcat/4.1.27 です。

サーブレットに動作したことがわかるようにコンソールへの出力が組み込んであるので
起動したことは、コンソールを見るとわかるようになっています。

ブラウザでサーブレットの URL をたたいた場合は、ちゃんとコンソールへの
出力がでて、起動していることがわかります。

No. 3785 # den 2004/06/15 (火) 13:30:15
>> 3783

HTTP は、ここで改行しないとダメだとかこういう順番でテキストを
送らないとダメだとかどういうルールがあるのでしょうか?

No. 3786 # den 2004/06/15 (火) 15:18:43
>> 3783

改行を入れるようにしたらレスポンスは返すようになってのですが、
やはりサーブレットは起動しません。

OS は、サーバ、クライアントともに Windows 2000 Professtional か Windows XP Professtional です。
Tomcat は、Apache Tomcat/4.1.27 です。

起動するというのは、コンソールに文字が出力されるということです。

ブラウザで同じことをした場合は、ちゃんと起動します。

No. 3787 # den 2004/06/15 (火) 15:19:42
>> 3783

レスポンスは、

HTTP/1.1 505 HTTP Version Not Supported
Content-Type: text/plain
Date: Tue, 15 Jun 2004 06:24:28 GMT
Server: Apache Coyote/1.0
Connection: close

・・・・・・

です。

No. 3788 # den 2004/06/15 (火) 15:30:52
>> 3783

リクエストの2行目の

strcpy( toSendtxt[1], "Host: localhost:8080" );

を削除したらうまく行きました。
どうもありがとうございました。

No. 3789 # 68user 2004/06/15 (火) 15:31:24
>>3786 den
> 改行を入れるようにしたらレスポンスは返すようになってのですが、
全くついていけません。具体的にどこをどういうふうに修正したんですか?

ふと思いましたが、
>>3778 den
> numsnt=send(destSocket, toSendtxt[idx],
> strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET);
この +1 は不要では?

No. 3790 # どら 2004/06/15 (火) 15:34:48
はじめまして。まだ初めて1ヶ月の初心者です。
すいませんがどうしてもエラーメッセージの意味がわからないので、教えていただかないでしょうか?

OSはSolarisの5.8です。

--------------------------------------------------------------------------------
ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS
6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます
。それ以外は無視されます
ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
--------------------------------------------------------------------------------

というものでした。特にldというものがいまいち理解できないのですが、ぜひとも教えてただければと思います。よろしくお願いします。

No. 3791 # den 2004/06/15 (火) 18:28:48
>> 3786

HTTP 1.0 以降では、ヘッダと本文を空行で分けているらしく、その空行が
ないためにレスポンスがないことがわかりました。

その後、HTTP Version Not Supported というレスポンスが返されるだけ
だったのですが、リクエストを "POST <<URL>> HTTP1.1" と空行だけに
したところちゃんとしたレスポンスを返すようになりました。

    

No. 3792 # TSURU 2004/06/15 (火) 20:48:47
>>3783 68user
>C で HTTP クライアントを作るって話なので、別に変ではないです。
いえ、僕は、サーバ上にある、Servletのプロセスを起動する処理を
Cのプログラムの中で実装する話だと思ってしまったので、
おかしいと思ったんですよ。

No. 3793 # TSURU 2004/06/15 (火) 21:00:07
denさんへ

根本的な話をしていいですか?

>>3781 den
の発言を読むかぎりでは、denさんのやりたいことは、
出社時間と退社時間を記録したいということですよね。
それだけのために、なぜサーブレットが必要になるんですか?
そこが分からないんですよ。
出社時間と退社時間を記録するだけだったら、別にサーブレット
を使わなくても、方法はいくらでもありますよね。
どうしてもサーブレットじゃないとだめなんですか?

でも、もうできたんですよね。
だったら、無理に他の方法でやれとは言いませんが、
ただ気になったので、書いてみました。

No. 3794 # TSURU 2004/06/15 (火) 21:57:40
denさんへ

>>3793 TSURU
の書き込みは、べつにあげあしとりとか、意地悪をするために書いたのではありません。
あくまで、単に疑問に思ったことを書いただけですので、くれぐれも誤解なきよう
お願いします。

No. 3795 # den 2004/06/15 (火) 22:24:04
>> 3793

話がややこしくなりそうなのであまり追求しようとは思わないのですが、
サーブレット以外にもやり方はあると思います。

ただインターネットエクスプローラから時間の記録ができたら便利かなと思って
そのようにしました。

でも仮で運用しているとそれでは使いづらいといわれてしまったので、
既存のサーブレットを利用して、C で起動する処理を作って済まそうと
思ったわけです。

サーブレットは、HTTPのリクエストをサーブレットコンテナが受信すれば
起動されるのでサーブレットを起動するには、HTTPクライアントとして
リクエストを送るだけでいいのです。

どうもありがとうございました。

No. 3796 # TSURU 2004/06/15 (火) 22:34:20
>>3795 den
なるほど。
細かい事情は分かりませんが、サーブレットを起動することで
済ませたかった訳ですね。
ゼロから実装するより、既存のもので済ませた方がずっど楽ですからね。
分かりました。

No. 3797 # yoko 2004/06/17 (木) 12:01:46
>>3776 yoko

返事遅くなりました。No.3776 yokoです。
No. 3783 # 68user
No. 3780 # とーりすがり
No. 3777 # TSURU
さん、レスありがとう。
ls -l > hoge.lst で調べるとtest^Mといった(^M)がついていました。
原因は分かりましたが、まだ格闘中です。
rm -r test^M
rm -r 'test^M'
rmdir 'test^M'
でも消えないんですよね。

  rm-r

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3798 # yoko 2004/06/17 (木) 17:11:08
>>3776 yoko

3776で投稿した yokoです。
rm -r test^Mで消えませんでしたがrm -r test*で消す事ができました。
皆さん、
ありがとうございました。

No. 3799 # kou 2004/06/17 (木) 21:10:06
RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。
それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか?
循環する頻度と公開鍵があれば秘密鍵も分かってしまうのでは・・?

Prev< No. 3777〜3799> Next  [最新発言に戻る] [過去ログ一覧]