68user's page 掲示板

Prev< No. 4028〜4041> Next  [最新発言に戻る] [過去ログ一覧]
No. 4028 # ken 2004/10/29 (金) 11:47:04
レスありがとうございました。m(__)m
>要は、ピアが送信したデータが全部届いたことを確認したいのですか?
はい。
>それならば、TCP/IP のレベルではなくアプリケーションのプロトコル
>レベルで実現するのが普通です。
httpサーバーにつなげてhtmlを受信した場合に受信終了時にrecv()戻り値が
0を送っていたのは、shutdown()がかかっていたと判断していいのでしょうか?
だとすれば、再度htmlを受信する場合は、再度acceptでsocketを作成して受信
開始する必要があるのかテストする必要を感じました。

何度もレスいただきましてありがとうございました。

No. 4029 # 68user 2004/10/29 (金) 12:37:29
>>4028 ken
> shutdown()がかかっていたと判断していいのでしょうか?
http サーバが shutdown か close したと判断してよいです。

> 再度htmlを受信する場合は、再度acceptでsocketを作成して受信
> 開始する必要があるのかテストする必要を感じました。
再度接続する場合は、クライアント側は socket を生成して connect
しなおす必要があります。サーバ側はリスニングソケットは listen
しっぱなしなので、クライアントが接続しなおしてきたら accept すれば
よいです。

ただし毎回接続・切断を繰り返していては性能が出ないため、HTTP/1.1 に
おいて keep-alive やパイプラインなどの、コネクションを切断せずに
複数のデータを取得するための仕組みが考案されているわけです (これも
アプリケーション層での工夫です)。

No. 4030 # sugimoto 2004/11/01 (月) 19:46:38
>>4001 68user
2週間程前PEM形式ファイルの読み込みで質問した者です。
なんとか手元を離れたので簡単に報告です。
処理は68user様のご指摘の通り行う事で全て対応できました。
色々ありがとうございました。
行ったのは以下の3処理です。
・PEM_read_RSAPrivateKey()でPEM形式ファイルを読み込む処理
    パスワード付きの場合の処理で少し苦労・・・
・RSA_private_encrypt()で暗号化する処理
・Base64エンコードの要求があったので、EVP_EncodeBlock()でエンコー
    ド処理
出来上がれば単純なのですが、着手した時は全くの白紙状態でしたので
本当に助かりました。有難うございました。

No. 4031 # 上田 [E-mail] 2004/11/02 (火) 15:36:15
いつも参考にさせていただいております。
初めて投稿します。
上田といいます。
よろしくお願いします。

『echo サーバを作ってみよう (3)』を参考にして、echoサーバを作成してみました。
概ねはうまくいきました。
しかし、おそらく子プロセスのものだと思うのですが、defunct(ゾンビ)が残ってしまいます。
このdefunct(ゾンビ)をうまく消す方法はないものでしょうか?

ちなみに、私の環境は
Cobalt LINUX 5.0
です。

もし、私の勘違いでしたらすみません。お許し下さい。
以上、よろしくお願いいたします。

上田

No. 4032 # 68user 2004/11/02 (火) 16:30:46
>>4031 上田
> このdefunct(ゾンビ)をうまく消す方法はないものでしょうか?
サンプルプログラムでは wait をさぼっているためゾンビが残ります。
サンプルを直そうと思いつつ、はや 2年近く経ってしまいました。

ひとつのやり方として、
>>2584 persianopeh
のように SIGCHLD をキャッチする方法があります。あるいは WNOHANG を
指定して waitpid してもよいです。

No. 4033 # 上田 [E-mail] 2004/11/03 (水) 12:09:01
>>4032 68user

68userさん、ありがとうございます。
教えていただいた $SIG{CHLD} = sub { wait }; ですが、不勉強なもので、記述する場所に若干の不安が残っています。
一応、43行目と44行目の間に記述したところ、次の3つは達成できました(目的は達成できました)。
・サーバ機能
・複数同時アクセス
・defunctの消去
もし記述する場所が間違っていれば、またご連絡いただけないでしょうか?

      36: # forkで子プロセスを生成
      37: if ( $pid = fork() ){
      38: # こちらは親プロセス
      39: print "親プロセス($$): 引続きポート $port を見張ります。\n";
      40: print "親プロセス($$): クライアントの相手はプロセス $pid が行います。\n";
      41:
      42: # 親プロセスはソケットをクローズ
      43: close(CLIENT);

                              $SIG{CHLD} = sub { wait };  #←←←ここに追加しました。

      44: next;

以上、ありがとうございました。
今後ともよろしくお願いいたします。

上田

No. 4034 # noza [E-mail] 2004/11/04 (木) 16:21:49
Cシェルの中で、sqlplusに接続してsqlを実行して結果を表示したいのですが、どのようにすればよいですか?
皆さん、教えてください。よろしくお願いします。

No. 4035 # アトヌル 2004/11/04 (木) 19:26:06
始めまして。
sedコマンドで、改行を含む文字列へ変換したいのですが、どのようにすればいいですか?

abcde
------
fgh
ijk

たとえば、abcdeをfgh(改行)ijkとしたい場合、

sed "s/abcde/fghijk/g" file1 > file2
これでは改行無しで置換されてしまいます。
\n,\r\nなど埋め込んでみましたがうまくいきませんでした。

皆さん教えてください、宜しくお願いします。

No. 4036 # 2004/11/04 (木) 19:34:08
Cシェルの中で、コマンドオプションの有無を判断するのには、どのようにIF文を書けば良いですか?
教えてください、よろしくお願いします。

No. 4037 # zsh 2004/11/06 (土) 19:36:04
>>4034 noza
ヒアドキュメントを使うとできた筈ですが
sqlplusの引数でユーザ名とパスワードが必要になるため
お勧めしません。

>>4035 アトヌル
sedでは確か無理だったと思います。
(嘘ついてたらごめんなさい。)

>>4036
コマンドオプションって何ですか?引数の事?

No. 4038 # 68user 2004/11/08 (月) 13:49:29
>>4033 上田
fork の前にシグナルハンドラを設定するのが普通かと思います。でないと、
設定前にシグナルが飛んできたら困りますので。

ただしシグナルハンドラは子プロセスに引き継がれるので、fork 後に
シグナルハンドラを戻すなどの対処が必要です (この例では子プロセスが
SIGCHLD を受けることはないので、どちらでも構わないのですが)。

>>4037 zsh
> ヒアドキュメントを使うとできた筈ですが
ヒアドキュメントでもいいし、別ファイルにしておいて
      sqlplus $user/$pass @hoge.sql
としてもよいです。

> sqlplusの引数でユーザ名とパスワードが必要になるためお勧めしません。
これはまぁいいんじゃないですかね。Perl で Oracle に接続しても
スクリプト中にパスワードを書きますし、Pro*C でもバイナリを
strings すればわかりますし。

No. 4039 # yamaさん [E-mail] 2004/11/08 (月) 21:26:09
yahooオークションの自動ログインシステムをプログラムしていますが、ログインできません。
どなたかご教授願います。以下にソースを掲載しておきます。

import java.net.*;
import java.io.*;

public class post {
    public static void main(String[] args) {
        try {
            int start = 0;
            PrintWriter pw = new PrintWriter
                        (new BufferedWriter(new FileWriter("post.html")));

            // URLクラスのインスタンスを生成
            URL helloURL =
                        new URL("http://login.yahoo.co.jp/config/login");

            // 接続します
            URLConnection con = helloURL.openConnection();
            // 出力を行うように設定します

            con.setDoOutput(true);
            con.setDoInput(true);

            con.setRequestProperty("Cookie","B=banotfp0orfbj&b=2");

            con.setRequestProperty("Accept-Language", "ja");
            con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");

            // 出力ストリームを取得
            PrintWriter out = new PrintWriter(con.getOutputStream());

            out.print(".tries=1");
            out.print(".done=http://page7.auctions.yahoo.co.jp/jp/auction/g25311966?");
            out.print(".src=auc");
            out.print("lg=jp");
            out.print(".intl=jp");
            out.print("login=********");
            out.print("passwd=*******");
            out.close();


            // 入力ストリームを取得
            BufferedReader in = new BufferedReader(
                                                                new InputStreamReader(
                                                                con.getInputStream(),"JISAutoDetect"));

            // 一行ずつ読み込みます
            String line;
            while ((line = in.readLine()) != null) {
                // 表示します
                pw.println(line);


            }


            // 入力ストリームを閉じます
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

post.htmlにはログインされた後の商品ページが表示されます(ログインできれば)

No. 4040 # やまさん [E-mail] 2004/11/08 (月) 21:45:49
yahooオークションの自動ログインプログラムを開発していますが、どーしてもログイン
できません。どなたかご教授願います。以下にソースを掲載します。

import java.net.*;
import java.io.*;

public class post {
    public static void main(String[] args) {
        try {
            int start = 0;
            PrintWriter pw = new PrintWriter
                        (new BufferedWriter(new FileWriter("post.html")));

            // URLクラスのインスタンスを生成
            URL helloURL =
                        new URL("http://login.yahoo.co.jp/config/login");

            // 接続します
            URLConnection con = helloURL.openConnection();
            // 出力を行うように設定します

            con.setDoOutput(true);
            con.setDoInput(true);

            con.setRequestProperty("Cookie","B=banotfp0orfbj&b=2");

            con.setRequestProperty("Accept-Language", "ja");
            con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");

            // 出力ストリームを取得
            PrintWriter out = new PrintWriter(con.getOutputStream());

            out.print(".tries=1");
            out.print(".done=http://page7.auctions.yahoo.co.jp/jp/auction/g25311966?");
            out.print(".src=auc");
            out.print("lg=jp");
            out.print(".intl=jp");
            out.print("login=******");
            out.print("passwd=*****");
            out.close();


            // 入力ストリームを取得
            BufferedReader in = new BufferedReader(
                                                                new InputStreamReader(
                                                                con.getInputStream(),"JISAutoDetect"));

            // 一行ずつ読み込みます
            String line;
            while ((line = in.readLine()) != null) {
                // 表示します
                pw.println(line);
    

            }


            // 入力ストリームを閉じます
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

なお、post.htmlには正常にログインできれば商品ページのソースを書き込みます。

No. 4041 # waka 2004/11/09 (火) 01:01:14
はじめまして、こんばんは.

http://x68000.q-e-d.net/~68user/net/c-http-1.html
http://x68000.q-e-d.net/~68user/net/c-http-2.html 関連で、
URL の解釈について、
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/pbrowser.html
のような記事を見つけました.
正規表現でも見かけられるやりかたでできるのだなぁと目が覚めました.

質問でもなんでもないのですが、お邪魔しましたm(_ _)m

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