|
>>4107 68user >>4018 68user >du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }' shかcshで異なるみたいです。 バークレイ版では、「\c」 エスケープを「-n」オプションで代用することができます。 echo が csh(1) の組み込み関数として用いられている場合には、バークレイ方式に 従っています。 #du -k $1 | sort -nr | awk '{ system("echo `echo "$1"*1024 | bc` \\\\c"); printf(" %s\n", $2) }' で、できました。 |
|
こんにちは kenといいます。 Winsockを使ってネットワークの勉強してまして大変勉強になりました。 ソケットプログラミングを進めていくうちにどうしてもわからない点が発生 したので、もしよろしければとおもいメールしました。 問題はSend()/Recv()でパケットサイズを超えるデータを連続で 送受信させたいのです。 パケットを超える送信をするにはsend()の引数にバッファ、サイズを そのままのっければ、自動でパケットサイズに切り分けて送信してる のを確認しました。ですが、受信終了を示す返り値のlengs=0を受信 できませんでした。どうも送ってないようです。httpサーバーに接続して 受信をためしたのですが、lengs=0を確認でき連続で受信することができました。 recv()での受信lengs:0はシャットダウンを意味するとの記述も見つけたのですが、 shutdown()では送信復帰ができないので、使えません。 パケットサイズを超えるデータを連続で送信し受信する時、 受信データの終了を送信したり、受信するにはどうすればいいので しょうか? サーバーがファイルの終了を示すleng=0を送信するのは なにか命令があるのでしょうか? ソケットをシャットダウンするとleng=0を送信できますが シャットダウンを復帰できないはずですがしてるのでしょうか? よかったらレスお願いしますm(__)m page:homepage3.nifty.com/MIDI-EDITOR/ mail:NQD00781@nifty.com ken |
|
>>4022 ken TCP ですか? それとも UDP ですか? > パケットサイズを超えるデータ パケットサイズって具体的に何のことを指していますか? > 受信終了を示す返り値のlengs=0を受信できませんでした。 送信側で close か shutdown しましたか? > shutdown()では送信復帰ができないので、使えません。 送信復帰って何ですか? |
|
sedを使用して先頭1行目のみ置換を行い、 すべてを出力させたいのですが、どうすれば よいですか。 sed 's/o=test$/o=honban/g' とすると置換は行われますが、先頭1行目のみ だけしたいのです。 CM1: id=00001,nm=test,o=aaa,o=test CM2: mod CM3: option - CM4: ftp CM5: get ↓ CM1: id=00001,nm=test,o=aaa,o=honban CM2: mod CM3: option - CM4: ftp CM5: get |
|
>TCP ですか? それとも UDP ですか? TCPです。 >> パケットサイズを超えるデータ >パケットサイズって具体的に何のことを指していますか? send()/recv()での送信、受信レングスです。 この場合では、Recv時のレングスです。 >> 受信終了を示す返り値のlengs=0を受信できませんでした。 >送信側で close か shutdown しましたか? サーバー側でデータを送信し、終了したらshutdown/closeを行うべき なのでしょうか? 確かにレングス0を受信できますが、その後に 送受信を必要な場合はどうすればいいのでしょうか? httpサーバーにアクセスした時はレングス0が帰ってきたのですが、 shutdownしていたのでしょうか? >> shutdown()では送信復帰ができないので、使えません。 >送信復帰って何ですか? 送信の終了を示す、レングス0を送るためにclose/shutdownを使うと、 その後にアクセスができなくなる。 shutodownしたソケットを再使用は危険とMSDNにでてます。 |
|
>>4024 どっかん sed -e '1s/o=test$/o=honban/' |
|
>>4025 ken 要は、ピアが送信したデータが全部届いたことを確認したいのですか? それならば、TCP/IP のレベルではなくアプリケーションのプロトコル レベルで実現するのが普通です。 例: - 送信側は「データ長 + データ」を送信。受信側は最初に受け取った データ長の分だけデータを受信したら、全データ到着とみなす。 - 改行コードをプロトコルのひとまとまりとみなす。送信側は データの末尾に改行コードをつけて送信。受信側は改行コードを 受け取ったら全データ受信とみなす。 端的に言うと、 recv の戻り値が 0 = FIN が届いたとき です (ノンブロッキングモードなどの例外はあるかと思いますが)。 で、FIN を投げるには close か shutdown する必要があるということです。 |
|
レスありがとうございました。m(__)m >要は、ピアが送信したデータが全部届いたことを確認したいのですか? はい。 >それならば、TCP/IP のレベルではなくアプリケーションのプロトコル >レベルで実現するのが普通です。 httpサーバーにつなげてhtmlを受信した場合に受信終了時にrecv()戻り値が 0を送っていたのは、shutdown()がかかっていたと判断していいのでしょうか? だとすれば、再度htmlを受信する場合は、再度acceptでsocketを作成して受信 開始する必要があるのかテストする必要を感じました。 何度もレスいただきましてありがとうございました。 |
|
>>4028 ken > shutdown()がかかっていたと判断していいのでしょうか? http サーバが shutdown か close したと判断してよいです。 > 再度htmlを受信する場合は、再度acceptでsocketを作成して受信 > 開始する必要があるのかテストする必要を感じました。 再度接続する場合は、クライアント側は socket を生成して connect しなおす必要があります。サーバ側はリスニングソケットは listen しっぱなしなので、クライアントが接続しなおしてきたら accept すれば よいです。 ただし毎回接続・切断を繰り返していては性能が出ないため、HTTP/1.1 に おいて keep-alive やパイプラインなどの、コネクションを切断せずに 複数のデータを取得するための仕組みが考案されているわけです (これも アプリケーション層での工夫です)。 |
|
>>4001 68user 2週間程前PEM形式ファイルの読み込みで質問した者です。 なんとか手元を離れたので簡単に報告です。 処理は68user様のご指摘の通り行う事で全て対応できました。 色々ありがとうございました。 行ったのは以下の3処理です。 ・PEM_read_RSAPrivateKey()でPEM形式ファイルを読み込む処理 パスワード付きの場合の処理で少し苦労・・・ ・RSA_private_encrypt()で暗号化する処理 ・Base64エンコードの要求があったので、EVP_EncodeBlock()でエンコー ド処理 出来上がれば単純なのですが、着手した時は全くの白紙状態でしたので 本当に助かりました。有難うございました。 |
|
いつも参考にさせていただいております。 初めて投稿します。 上田といいます。 よろしくお願いします。 『echo サーバを作ってみよう (3)』を参考にして、echoサーバを作成してみました。 概ねはうまくいきました。 しかし、おそらく子プロセスのものだと思うのですが、defunct(ゾンビ)が残ってしまいます。 このdefunct(ゾンビ)をうまく消す方法はないものでしょうか? ちなみに、私の環境は Cobalt LINUX 5.0 です。 もし、私の勘違いでしたらすみません。お許し下さい。 以上、よろしくお願いいたします。 上田 |
|
>>4031 上田 > このdefunct(ゾンビ)をうまく消す方法はないものでしょうか? サンプルプログラムでは wait をさぼっているためゾンビが残ります。 サンプルを直そうと思いつつ、はや 2年近く経ってしまいました。 ひとつのやり方として、 >>2584 persianopeh のように SIGCHLD をキャッチする方法があります。あるいは WNOHANG を 指定して waitpid してもよいです。 |
|
>>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; 以上、ありがとうございました。 今後ともよろしくお願いいたします。 上田 |
|
Cシェルの中で、sqlplusに接続してsqlを実行して結果を表示したいのですが、どのようにすればよいですか? 皆さん、教えてください。よろしくお願いします。 |
|
始めまして。 sedコマンドで、改行を含む文字列へ変換したいのですが、どのようにすればいいですか? abcde ------ fgh ijk たとえば、abcdeをfgh(改行)ijkとしたい場合、 sed "s/abcde/fghijk/g" file1 > file2 これでは改行無しで置換されてしまいます。 \n,\r\nなど埋め込んでみましたがうまくいきませんでした。 皆さん教えてください、宜しくお願いします。 |
|
Cシェルの中で、コマンドオプションの有無を判断するのには、どのようにIF文を書けば良いですか? 教えてください、よろしくお願いします。 |
|
>>4034 noza ヒアドキュメントを使うとできた筈ですが sqlplusの引数でユーザ名とパスワードが必要になるため お勧めしません。 >>4035 アトヌル sedでは確か無理だったと思います。 (嘘ついてたらごめんなさい。) >>4036 y コマンドオプションって何ですか?引数の事? |
|
>>4033 上田 fork の前にシグナルハンドラを設定するのが普通かと思います。でないと、 設定前にシグナルが飛んできたら困りますので。 ただしシグナルハンドラは子プロセスに引き継がれるので、fork 後に シグナルハンドラを戻すなどの対処が必要です (この例では子プロセスが SIGCHLD を受けることはないので、どちらでも構わないのですが)。 >>4037 zsh > ヒアドキュメントを使うとできた筈ですが ヒアドキュメントでもいいし、別ファイルにしておいて sqlplus $user/$pass @hoge.sql としてもよいです。 > sqlplusの引数でユーザ名とパスワードが必要になるためお勧めしません。 これはまぁいいんじゃないですかね。Perl で Oracle に接続しても スクリプト中にパスワードを書きますし、Pro*C でもバイナリを strings すればわかりますし。 |
|
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にはログインされた後の商品ページが表示されます(ログインできれば) |
|
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には正常にログインできれば商品ページのソースを書き込みます。 |
|
はじめまして、こんばんは. 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 |
|
>>4040 やまさん Java の実行環境がないので検証できませんが、普通にブラウザでアクセスし、 ethereal などでパケットダンプしましょう。さらに自作プログラムのやりとりも 同様にパケットダンプして見比べてみましょう。 >>4041 waka http://www.din.or.jp/~ohzaki/perl.htm#httpURL というのもあります。 scanf 系で %[..] として文字集合が使えるのは初めて知りました。 |
|
FTPクライアントで分割ダウンロードする場合、 どんなプログラムになるのでしょうか? HTTPクライアントで分割アップロードする場合、 どんなプログラムになるのでしょうか? 教えて頂けませんか? |
|
>>4043 クライアント > FTPクライアントで分割ダウンロードする場合、 > どんなプログラムになるのでしょうか? REST を使います。 > HTTPクライアントで分割アップロードする場合、 > どんなプログラムになるのでしょうか? 分割アップロードが PUT を指すのか POST を指すのか知りませんが、 規格としては分割アップロードなるものは規定されていないと思います。 サーバ側の CGI なり Servlet なりで引数を解釈するようなつくりに すれば、なんだって可能です。 |
|
68userさんご教授ありがとうございます。言われたとおりにパケットダンプしてソースを 書き直したところ、今度はcookieが無効であると言う画面がでました。 書き直したソースは以下の通りです。 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("Accept","image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*"); con.setRequestProperty("Accept-Language", "ja"); con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); con.setRequestProperty("Accept-Encoding", "gzip, deflate"); con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"); con.setRequestProperty("Host","login.yahoo.co.jp"); con.setRequestProperty("Content-Length","145"); con.setRequestProperty("Connection","Keep-Alive"); con.setRequestProperty("Cache-Control","no-cache"); // 出力ストリームを取得 PrintWriter out = new PrintWriter(con.getOutputStream()); out.print(".tries=1&.done=http%3A%2F%2Fpage7.auctions.yahoo.co.jp%2Fjp%2Fauction%2Fg25311966%3F&.src=auc&lg=jp&.intl=jp&login=formulaatsushi&passwd=formula3"); 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(); } } } etherealのログ POST /config/login HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Host: login.yahoo.co.jp Content-Length: 145 Connection: Keep-Alive Cache-Control: no-cache HTTP/1.1 302 Found Date: Tue, 09 Nov 2004 10:41:26 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311966%3f&.src=auc Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=0jed4t90p17mm&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp Set-Cookie: F=a=2AxMxi8sve2gE8jFN9rJ0gWrAAvZQREqLtzb2_UZvSzjM5JqtaIqse_xaCta&b=pEuj; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp Set-Cookie: Y=v=1&n=2q7rnefmn4krh&l=5ehckb00jiki78/o&p=m2avvjp403000400&r=bk&lg=jp&intl=jp&np=1; path=/; domain=.yahoo.co.jp Set-Cookie: T=z=W7JkBBWBfkBBIROI05ItUNi&a=YAE&sk=DAA.hvzZ6s/ztd&d=YQFZQUUBb2sBWlcwLQF0aXABYm4ySnNEAXp6AVc3SmtCQmdXQQ--; path=/; domain=.yahoo.co.jp GET /config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311966%3f&.src=auc HTTP/1.1 User-Agent: Java1.4.0 Host: login.yahoo.co.jp Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive HTTP/1.1 200 OK Date: Tue, 09 Nov 2004 10:41:26 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Refresh: 900; URL=http://www.yahoo.co.jp/ Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=c0ev5h10p17mm&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp /config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311を getする際にヘッダー情報が変わってしまいます。 どなたかご教授願います。 |
|
>>4045 やまさん 正解は ethereal が教えてくれているはずですので、こういう質問は回答 する側としては非常につまらないのです。だから、質問する側も、もう ちょっと努力する姿勢を見せてください。 > 今度はcookieが無効であると言う画面がでました などというわけのわからんことを言っていないで、 「IE では〜というリクエストを送っているが、Java だと〜という リクエストを送信してしまう。IE と同じリクエストを送信するには どうしたらよいか」 くらいの質問にブレイクダウンしてください。リクエストとレスポンスを 見比べるだけの注意力があれば簡単なはずです。 あと、HTTP の基本的な知識があるのかないのかさっぱりわからないので、 http://x68000.q-e-d.net/~68user/net/ HTTP クライアントを作ってみよう(1)〜(4) を読んだ上で、telnet を使って接続してみてください。それに成功してから 初めて Java で実現するにはどうすればいいか、という話になるわけです。 一応ヒントだけは出しておきます。 - /config/verify に cookie なしでリクエストしているのは誰か? まだ 提示していないソースがあるのか? URLConnection クラスが自動的に 再接続しているのか? - URLConnection が自動的に再接続しているのであれば、 HttpURLConnection クラスを使って setInstanceFollowRedirects メソッドで再接続を抑止し、自前で cookie 付きで再接続してみては。 |
|
>>4046 68user > 一応ヒントだけは出しておきます。 試したわけではないので、ヒントが的確かどうかは知りません。念のため。 |