Windows上でアプリケーションを作る勉強をしようと思っています。

Javaにすべきでしょうか?C#にすべきでしょうか?

「Java言語はクライアントアプリ開発のメジャーになれるか?」
http://headlines.yahoo.co.jp/hl?a=20041009-00000 …

を読むと、Javaの未来もバラ色に見えます。
メリットとディメリットを教えて頂けないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (7件)

> これは、やはり実行速度の問題でしょうか?



速度はあまり関係なかったかな。(個人的にはあまり速度差は気にならなかった)
ただC#はJavaよりも言語としてよく出来ていると思いました。Java同様分かりやすい言語でありながら、プロパティ、インデクサ、デリゲート、列挙体などの有能な機能が追加されています。

Javaは言語に備わっている機能がシンプルな分だけプログラマがソースコード上で不十分な点を補わなければいけなかったのですが、C#は言語自体の機能が多いのでその分簡潔で見やすいソースが書けます。(もっとも、やってることの本質的な部分は両者とも同じですが)

ただ、言語そのものとしてはC#の方が上でも、実際のプログラムで言語から呼び出して使える機能(ライブラリ)はJavaの方が現時点では上なので、悩ましいところです。

クライアントアプリを作るための言語としては、JavaでもC#(.NET Framework)でも、OSとは別に実行環境を整えて仮想マシン上で動かすという点では同じなので、シェア争いの点では今のところ両者互角ですが、数年後には Windows に .NET Framework 実行環境が標準搭載されるようになって、Javaは次第に追いやられていくのではないかというのが私の勝手な予想です。

Javaはやはりサーバー側アプリや携帯電話用アプリなどの分野で活躍していくのではないかと。

この回答への補足

> Javaはやはりサーバー側アプリや携帯電話用アプリなどの分野で

おっしゃるとおりのような気がしてきました。ありがとうございます!

補足日時:2004/10/14 21:39
    • good
    • 0

> Javaのメリットとしては、OS互換がパーフェクト、くらいでしょうか。



パーフェクトというより、どのOSでも問題なく動かせるだけというべきかもしれません。どのOSでも使える機能しか提供されていないので、そうでない機能はJavaの中で何とかする必要があります(GUIが代表例)。

逆にC#はWindowsが前提になっているので、Windows固有の機能も大抵使えます(Application Dataフォルダの位置を取得するとか)。ただ、歴史が浅い分 機能や情報が不足している点は否めませんが(標準ライブラリでは音楽を鳴らすこともできない)。

ちなみに、C#で(というか .NET Frameworkで)作ったプログラムでも、実行環境を整えればWindows以外のOSでも動きますし、Java同様無料で開発環境を整えることも可能です(JavaのEclipseに対してC#にはSharpDevelopがあります。もっとも、EclipseでC#の開発も一応できるみたいですが)。

言語としてはC#よりJavaのほうが簡単で覚えやすいと思います。ただ歴史が長い分Javaは「負の遺産」も引きずっており、それらを解消するために新しく作られた言語としては C#は洗練された言語です。
(別にJavaが駄目だと言っているわけじゃないですが、私はJavaに耐えかねてC#に乗り換えたので)

この回答への補足

参考になる情報、大変ありがとうございます。ちょっと迷ってきました・・・

> 私はJavaに耐えかねてC#に乗り換えたので

これは、やはり実行速度の問題でしょうか?

補足日時:2004/10/10 18:48
    • good
    • 0
この回答へのお礼

ひとつ気になっていたのは、フリーウェアでもシェアウェアでも、普通のソフトウェア会社が作るパッケージ商品にしろ(一太郎、ホームページビルダー、etc.)、いま私が目にするWindows向け製品は、そのほとんどが MSの Developer Studio で作られたモノだということです。

これらはC++で作られているのだと思うのですが、これらは 将来 C#になっていくのかな、と以前は思っていたのです。

でも、上記の記事をみて、Javaがこの分野にも出てくるのかな、と思いました。

お礼日時:2004/10/10 18:55

Javaは若干経験がありますが、C#の経験はありません。


なのでJavaに関してだけ、私の意見を。

おそらく同じようなアプリケーションを作った場合、Javaの方が動作が鈍いでしょう。
それと今Javaはサーバーサイドの情報は多いですが、クライアントサイド(AWTやSwing)の情報はあまり多くありません。何か分からなくなったとき、ある程度自分で解決できる必要があります。

>ところで、eclipseはもたつくのですか?
マシンパワーにもよりますが、最近のeclipseは十分早いです。(P4 2.3G Memory512Mなら十分)
というのもeclipseはGUIの部分はJavaではなく独自のSWTというプラットホーム依存のツールを使っているからです。
このツールは他のアプリケーションでも使うことが出来るので、AWTの貧弱さやSwingの重さに耐えられなかったら、使ってみてください。
(プラットホーム依存ですが、WindowsとLinux向けにはライブラリが提供されています。)

>Javaの場合、どういう開発環境がヘルプが使いやすいのでしょうか?
JavaはライブラリのマニュアルがHTMLで出来ているので、お使いのブラウザで見ることが出来ます。
これはソースに特殊な形のコメントを付け、JDK(Javaの開発ツール)に付属しているJavadocというツールで自動生成します。もちろん自分で作ったプログラムにも同じ形式でコメントをつければ、マニュアルを作成することができます。
eclipseなどでは、これをヘルプとして見る機能が付いてます。

最後にJDK、Eclipse(SWTも)、多くの高機能なライブラリが無料で使えると言うのがとても魅力的です。
個人で勉強するのならとても重要な要素だと思います。

この回答への補足

みなさまのおかげで、事情が少しずつ分かってきたような気がします。

> クライアントサイド(AWTやSwing)の情報は
> あまり多くありません。

たしかに、そう思います。特に、AWTの分かりやすい本を探すのには苦労しました。

> eclipseはGUIの部分はJavaではなく
> 独自のSWTというプラットホーム依存のツールを使っているからです。

そうだったのですか!だから速いと言われているのですね。自分が作ったプログラムを動かすためには、SWTの有無を確認しないといけないわけですね。

javadocでつくったマニュアルをeclipseがヘルプとして参照できるというのはいいですね。なんか、美しいです。

補足日時:2004/10/10 18:44
    • good
    • 0

仕事でC#とJavaを少し使いました。

今後もどっちの仕事も待ちかまえてますが。

C#は実質的に一ヶ所から仕事がきているだけで、Javaの方がはるかに量としては多いようです。

クラスなんかは大分違いますが、言語的には似たようなものです(笑)

C#のデメリットはWindowsの.NETのみという点でしょうかね。現実的には、開発、実行ともWindowsのみです。
あと、個人的にはVisual Studio系のヘルプは嫌になるほど見づらいと思ってます。C,C++,VB,C#と使ってますが。
似たようなことをJavaで調べるのとC#で調べるのとでは大分違います。私だけかな?
メリットは逆にいろいろな物が一つしかないということです。
開発ツールも、WebアプリつくるのでもIIS限定とか。

Javaのメリットはプラットフォームを選ばないこと、実際に使われているのはJavaの方が多いことでしょか。
デメリットはツールやらなにやらでいろいろとバリエーションがあることでしょうか。
あと、Windowsに限定すれば汎用のJavaの方がいろいろと劣りますね。
個人的にはJavaの方が好きです。

勉強ならJavaを薦めます。すべきとまではいいませんけど。
あと、Javaなら無償で充分な環境そろいますし。
C#はやはりVisual Studioの購入が必要でしょう。

あと、C#は.exeができても実行には.NET Frameworkが必要になりますから、JVMが必要なJavaとあまり変わりません。
それに.exeの実質的な中身は中間コードですし。
古いWindowsを含めて実行させるという意味だと、C#のexeはかなり曲者です。

この回答への補足

大変参考になります。Javaにしようかと思います。

> Visual Studio系のヘルプは嫌になるほど

Javaの場合、どういう開発環境がヘルプが使いやすいのでしょうか?terra5さんはどのような環境でしょうか?

もし差し支えなければ教えて頂けるとうれしいです。

補足日時:2004/10/09 22:43
    • good
    • 0

Windowsだけで動かすためのアプリケーションを作るなら、断然 C# でしょう。


逆に Windows 以外の OS でも動くアプリケーションを作るなら、Java の方が有利です。

C# は一応 Windows で実行することが前提となっているので、Windows にしかない OS 固有の機能も扱いやすく、GUI も Windows のネイティブのものをそのまま使えます。
ソースをコンパイルすると直接exeファイルができるので、プログラムの実行も簡単です。

Java は最初から複数の OS で動かすことが前提になっているので、機能もある程度限られます。GUIはネイティブのものを使わず全て自前で描画するので、重いしちょっと汚いです。
コンパイルしたプログラムはJARというアーカイブにまとめて、それをコマンドから起動することになります。

言語に備わっている機能は、今のところ Java よりも C# のほうが上です。Javaはシンプルですが、逆に物足りなく思う点も多いです。
ただ Java のほうがウェブアプリケーションの分野で圧倒的に普及しているので、その分情報等は得られやすいと思います。クライアントアプリの分野では普及率はどっちもどっちでしょう。

この回答への補足

ありがとうございます。

断然 C#、なのですね。
Javaのメリットとしては、OS互換がパーフェクト、くらいでしょうか。

補足日時:2004/10/09 18:08
    • good
    • 0

#1さんのはWeb上のアプレットの話ですね。



業界の現場の状況を見ますと、まあ私の知ってる範囲だけですけど、Javaの仕事はごろごろありますが、C#で何か作ったなんて話は正直聞いたことがないです。
まあJavaを使った仕事は現場ではクライアントアプリケーションよりはサーブレットのほうがずっと多いですけどね。

Javaの強みはやはり環境を選ばないことですね。
unixでもMacでもかかってこいですからね。

C#がでてきたころはいろいろ言われましたが、現状を見るとJavaのほうが圧倒的に使われていますし、どう見てもJavaの勝ちでしょう。

デメリッとは。。。パフォーマンスがやや低いことでしょうか。これもマシン性能がどんどん上がっている今ではとるにたらないことかも知れません。eclipseのような巨大アプリはさすがにいろいろともたつく局面が多いので気になりますが。。。

ちなみに、Javaに力を入れているのはIBMです。下手すると本家のSunに取って代わるんではないかと思わせるくらいの熱の入れようです。自社製品にどんどんJavaを導入しています。WebSphereのツールやDB2のGUIなどは皆Javaになっています。eclipseだってIBMですからね。

というわけで、どう考えてもJavaを選ぶのが正解です。

この回答への補足

ありがとうございます。

Javaが良いのですね。#3さんとのコメントの間で少し混乱しています。。。

現在のところ、Windows 上で動かすことしか考えていませんが、もし、C# と Java が Windows上でそれほど違いがないのなら(作成の手間や実行速度)Javaを勉強した方がいいのかな、と思いました。

目的としては、Windows上で動くフリーウェアを将来作ることが出来ればと思っています。

ところで、eclipseはもたつくのですか?「いまでは周知となったことだが、数年前は誰もが驚くと共に信じられなかっただろう。その理由は、まるでWindowsネイティブアプリケーションのような、豊富なウィジェット利用にある。Java上での開発事情を知るJavaアプリケーション開発者ほど、驚いたものだ。」と該当ページに書いてあったので、サクサク動くのかなと思っていました。

補足日時:2004/10/09 16:58
    • good
    • 0

デメリットは、ブラウザの設定で動かせなくしてしまうことが出来ます。


すべての人が使えるようにするなら、C#でしょうねー。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q転職エージェントと一般応募 違いがありますか?

エージェントに登録していて、そこから紹介された職種があるのですが、同様に同社のホームページよりリクルートページが掲載されており、同職種が申し込み可能になっております。

エージェントのメリットは、各種手配をしてくれることだと理解しておりますが、デメリットとしてはそのあたりで、事後の各種手続きや関係が面倒だと聞いたことがあります。


面接等に進むにあたり、もしくは採用までの経過にあたり、エージェント経由、ホームページ経由で違いがありますでしょうか?


エージェントのメリットがなかなか分からないので、経験者の方 いらっしゃったらお教えください。

Aベストアンサー

エージェントが紹介するということは、あなたのプロフィールと求人の要件にマッチングがあると「エージェント」が判断したということです。
企業からすると、その「エージェント」が紹介するに値する人物であると判断したということで、ただ「入社したい」という一般応募者(こちらは玉石混交です)とは、明確に違いがあります。
問題は、企業がその「エージェント」をどのくらい信頼しているかだと思います。ちゃんと自分で評価をして紹介してくるエージェントであれば、それなりの重みをもって受け取られるでしょうけれども、とりあえず数投げてくるようなエージェントであれば一般応募と変わりません。
また、エージェント経由の場合は、企業は紹介料を支払うことになります。つまり紹介料を支払ってても採用したい人材かどうかですね。
一般応募で容易に見つかると思われる程度の人材であれば、わざわざ紹介料を支払ってまで採用しないでしょう。
メリットとしては、エージェントしか知らない求人案件があり、これらは、求人広告や企業のサイトに現れてこない、ということでしょう。
手続きなどは企業と採用者の間の問題ですのでエージェントは無関係です。

エージェントが紹介するということは、あなたのプロフィールと求人の要件にマッチングがあると「エージェント」が判断したということです。
企業からすると、その「エージェント」が紹介するに値する人物であると判断したということで、ただ「入社したい」という一般応募者(こちらは玉石混交です)とは、明確に違いがあります。
問題は、企業がその「エージェント」をどのくらい信頼しているかだと思います。ちゃんと自分で評価をして紹介してくるエージェントであれば、それなりの重みをもって受け取られるで...続きを読む

QJavaとmysql-connector-java-5.1.5-bin.jar

JavaからMysqlにアクセスしてみたいのですが、
​http://itpro.nikkeibp.co.jp/article/MAG/20061122/254564/​ を読んで試してみました。ClassNotFoundException が発生する。までは上記HPの通りです。mysql-connector-javaを設定すればと説明されているのですが、その実行ダイアログはどうすると出てくるのか分かりません。
 色々と試してみているのですが、どうも良く分かりません。要はmysql-connector-javaをJAVAコンパイル時に参照出来ないとういうことだと理解しています。
ClassPathなるものを通せば良いとありますが、システムのプロパティから環境変数の設定でやってみました。または、WEB-INF/LIBにmysql-connector-javaを置けばということでやってみましたが反応しません。
ご説明戴ければありがたいです。当方全くの初心者です。

Aベストアンサー

こんにちは。
yotarouさんもリンク先の通りeclipseで開発されていると思うのですがバージョンはどれでしょうか?
リンク先の記事は2005年と古く、eclipseのバージョンも古い為に現在のeclipseとは見た目が変わっているのでわからなかったのかと思います。

ちなみに現在のeclipseの最新バージョンは3.5でして、3.5でのeclipseのクラスパスの設定方法は、
eclipseの左側にあるパッケージ一覧から設定したいプロジェクトを右クリックし「プロパティー」をクリック→「Javaのビルド・パス」を選択→「ライブラリー」を選択→「外部JARの追加」をクリックし表示されるウインドウにてmysql-connector-javaのJARを選択する
で設定できると思います。

ただ質問の内容から基本知識が不足しているように感じますので、早く何かを作りたいという気持ちもありますでしょうが、基礎知識こそ本当に大切だと思うので基礎を固めることをオススメします。

僕の知る範囲では、本ですと結城さんの入門書の上下巻あたりが。
http://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88-Java%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E4%B8%8A-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797332115/ref=sr_1_5?ie=UTF8&s=books&qid=1260448373&sr=8-5

サイトですと下記のサイトあたりがオススメかと思います。
http://www.javaroad.jp/index.htm

こんにちは。
yotarouさんもリンク先の通りeclipseで開発されていると思うのですがバージョンはどれでしょうか?
リンク先の記事は2005年と古く、eclipseのバージョンも古い為に現在のeclipseとは見た目が変わっているのでわからなかったのかと思います。

ちなみに現在のeclipseの最新バージョンは3.5でして、3.5でのeclipseのクラスパスの設定方法は、
eclipseの左側にあるパッケージ一覧から設定したいプロジェクトを右クリックし「プロパティー」をクリック→「Javaのビルド・パス」を選択→「ライブラリー...続きを読む

Q転職のエージェントと転職サイトの違い

転職活動を始めようと思っています。
素人なので教えていただきたいのですが、

転職エージェントと、転職サイトの違いが
わかりません。

どこが違うのでしょうか?

エージェントというのは、マージンを取る所
というイメージなのですが。

おわかりになる方教えていただけますでしょうか。

Aベストアンサー

こんにちは。
転職エージェントと転職サイトの違いは、

転職エージェント・・・いわゆる人材紹介会社。転職しようとしている人に求人企業を紹介する所で、就職が決まれば求人企業から紹介料をもらう。(もしかすると求人を登録するだけで手数料を取る所もあるかもしれない。)

転職サイト・・・企業の求人広告を掲載するサイト。求人企業から掲載料をもらう。

こんな感じでしょうか。どちらもマージンというか、手数料は取っていますね。

Qjavaの開発ツールでメジャーなものは?

こんにちは、いつもお世話になっております

新しく言語を覚えようと奮起いたしました
javaを覚える上で開発ツールは何がオススメでしょうか?
コンピューター言語を覚えるのはコレが初めてなのですが
いきなりjavaでも、大丈夫でしょうか?

basicやCはそれぞれ「VisualBasic」・「Visual C」などがあり
javaにも「Visual J」や「JBuilder」などがあるようですが
どれが使いやすく初心者にも扱えるかを
諸先輩方々のご指導を仰ぎたく質問させていただきました

宜しくお願いいたします。

Aベストアンサー

Javaは初めて学ぶ言語として非常に理想的。
もっとも賢明な選択といえます。

今後C++に移行するにせよ、また、JavaScriptを
記述するにせよ。Javaの考え方を知っているか知っていないかでは、大きな差が出ます。
Cから始めてC++に移行する人よりも、JavaからはじめてC++など他の言語をマスターする人の方が、はるかに美しいソース(美しい設計)を記述する傾向が高いからです。

皆さんがおっしゃるように、はじめのうちはJDKで開発をすすめるのがよいと思います。とりあえず、2,3ヶ月程度はJDKで開発をすすめて、Javaの言語としての側面のみならず、その全体的な仕組みや環境の構築も身につけておいたほうが、後々のためです。
地盤がしっかいしていない土地に高い建物を建てようとすると、失敗します。まずは地盤を固めましょう。

ツールについてですが、個人として使用するのであれば、JBuilderがお勧めですが、将来キャリアにしたいということであれば、やはりVisualJ++ということになります。
これは単体の言語開発環境としては、JBuilderを選択してもVisualJ++を選択してもたいして違いはありませんが、
(現在少々違いがあっても将来的には埋まってしまうものです)
企業が使用しているヒット率というてんで、C++BuilderよりもVisualC++の方が圧倒的に確率が高く、当然、アプリケーションの連携という観点から、単体としてすぐれているかもしれないJBuilderよりも既存のVisualC++との相性が良いVisualJ++を採用する可能性が高いためです。

というわけで、趣味の範囲をでることはまずない!!
ということであれば、JBuilderを
のちのちは本格的にビジネスまでも見据えて…
ということであれば、VisualJ++を
を使用してみるのがよいのではないでしょうか。

Javaは初めて学ぶ言語として非常に理想的。
もっとも賢明な選択といえます。

今後C++に移行するにせよ、また、JavaScriptを
記述するにせよ。Javaの考え方を知っているか知っていないかでは、大きな差が出ます。
Cから始めてC++に移行する人よりも、JavaからはじめてC++など他の言語をマスターする人の方が、はるかに美しいソース(美しい設計)を記述する傾向が高いからです。

皆さんがおっしゃるように、はじめのうちはJDKで開発をすすめるのがよいと思います。とりあえず、2,3ヶ月程度はJDKで開発をす...続きを読む

Qシンクライアントとクラウドコンピュータの違い

シンクライアントとクラウドコンピュータの違いを教えてください。

シンクライアントとクラウドコンピュータが混合するシステムは存在するのでしょうか。
私の今の理解は、シンクライアントとは「端末(PC)にデータを保存せず、シンクライアント用サーバに全てデータを保存する。」 クラウドコンピュータとは「データセンターを構築して、端末(PC)のデータは全てデータセンターへ保存し、またアプリケーションソフトもデータセンターに置いてあるものを使用する。」
という認識です。

初歩的な質問で申し訳ございませんが、ご回答のほど、何卒よろしくお願い申し上げます。
また、これらの違いが分かる書籍も紹介して頂けると幸甚です。

Aベストアンサー

 用語が混乱しているね。
 シンクライアントに関してはおっしゃる通り。そこであなたが言う「シンクライアントサーバー」という言葉に「クラウド」を上書きすればいい。
 つまり「端末(PC)にデータを保存せず、クラウド化されたサーバ群に全てデータを保存する。」このクラウド化というのは、既存のサーバー群を一体的に、つまりあたかも雲のようなネットワークに、あらゆるデータを置くことで、リスク分散やモバイル化につなげようというもの。グリッドコンピューターも似たもの。
 本来のシンクライアントは端末にOSと読み込み用アプリだけを置くはずだったけど、最近のケータイのような場合はどうするか、悩みどころ。ホームページ制作のCSSも、デザインをサーバーから引っ張ってくるという意味では一部シンクライアント風。
 資料なら、以前キーマンズネットで見かけたことがある。なにせ中心点がないネットワークなので、知っている人が少ない分野。つまり商売にできる可能性がある。

QPHP側でSESSON変数に値をセットして、クライアント側のjavas

PHP側でSESSON変数に値をセットして、クライアント側のjavascriptで、SESSON変数の値を取得する方法は?

<?php
session_start();
$a[0][0] = 5;
$a[0][1] = 9;
$a[0][2] = 8;
$_SESSION["id"] =$a;
?>
<html>
<head>
<title>wwww</title>
</head>
<body>
<script language="JavaScript" type="text/JavaScript">
function test(){
id =getsession();//←このようなことが、したいです。
    document.write(id[0][0]);
}
</script>
<button onclick="test()">sssssss</button>
</body></html>

Aベストアンサー

とりあえず、こんなやり方はどうですか?

<?php
$a[0][0] = 5;
$a[0][1] = 9;
$a[0][2] = 8;
?>
<html>
<head>
<title>wwww</title>
</head>
<body>
<script language="JavaScript" type="text/JavaScript">
<?php
print "var id = [[".$a[0][0].",".$a[0][1].",".$a[0][2]."]];\n";
?>
function test(){
    document.write(id[0][0]);
}
</script>
<button onclick="test()">sssssss</button>
</body></html>

セッションを使う理由はなんでしょう?

セッションはphp側だけで処理して、値のやりとりはクッキーを使う、というのでもいいと思うんですよ。

Qエージェンシーとエージェントの違い

エージェンシーとエージェントの違いってなんなのでしょうか?調べてもなかなか、答えがみつからないので、アドバイスお願いします。

Aベストアンサー

何についておっしゃってるのかわからないのですが、普通に言葉の意味だけなら、エージェントは仲介とか代理とかをする人で、エージェンシーはそういうことをする会社とかの組織です。

QJava(クライアント)とC言語(サーバ)間のソケット通信 文字列送受信の不具合

サーバ側がC言語(Linux)、クライアント側がJavaのソケット通信プログラムを書いているのですが、いきなりつまづいてしまったため質問失礼します。

ソースとしては以下の2つのソースをテストとして利用させて頂きました。
ローカルネットワーク内の2台にそれぞれを設置し、それにあわせてIPとポートは変更してあります。
http://www.aihara.co.jp/~junt/program/socket/inet_server.c
http://www.hellohiro.com/src/HelloWorldSocketClient.java

クライアントのJavaプログラムから"Hello World"をサーバのCプログラムに送ると"Hello World"とは標準されるものの、出力された後ろに文字化けしたような文字が少し出てしまいました。加えて、直後にもう一度試してみようとサーバプログラムを立ち上げるとbindでエラーを吐いてしまいました。
recvの結果(rc)をprintfで確認してみたところ、13となり2文字多く送られていることを確認しました。
そこで、Javaのprintlnの自動改行周りが原因かと思いprintfに変えてた試してみました。
しかし、recvの結果は11となったものの文字化けと直後のbindエラーはなおりませんでした。(文字化けの種類が変わりましたが)
この問題の原因と考えられることと解決案をアドバイス願えませんでしょうか。よろしくお願いします。


以下、開発環境です。
■C言語
OS:Fedora 12
エディタ:一応VisualC++2008(Linux用に書いているので実質ただのテキストエディタ)
コンパイラ:標準gcc

■Java
OS:Windows XP SP3
エディタ・コンパイラ:eclipse


※実装先の都合上、winsockによるサーバに変えるや言語の変更はできません。

サーバ側がC言語(Linux)、クライアント側がJavaのソケット通信プログラムを書いているのですが、いきなりつまづいてしまったため質問失礼します。

ソースとしては以下の2つのソースをテストとして利用させて頂きました。
ローカルネットワーク内の2台にそれぞれを設置し、それにあわせてIPとポートは変更してあります。
http://www.aihara.co.jp/~junt/program/socket/inet_server.c
http://www.hellohiro.com/src/HelloWorldSocketClient.java

クライアントのJavaプログラムから"Hello World"をサーバの...続きを読む

Aベストアンサー

サーバ側のほうでbuf[]が初期化されてないからゴミがでるのは当然なんでは?
あるいはターミネータ付けるとかしないと終わりが分からんと思いますが。

/* acceptしたソケットから受信*/
rc = recv(fd, buf, 256, 0);
if(rc < 0){
printf("server:recv error.\n");
exit(rc);
} else {
  buf[rc] = 0 ;
 }
printf("server:recv %s.\n", buf);

QシンクライアントとVDIの違い

シンクライアントとVDIの違いがわかりません

一緒の物ではないのでしょうか。
ご教授お願いします。

Aベストアンサー

VDI側から物を見ると、VDIを使うツールの一つがシンクライアント。

シンクライアント側から物を見ると、シンクライアントの方式の一つが、VDIを使う方式。

シンクライアントとVDIそれぞれの意味を調べましょう。
http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88
http://ja.wikipedia.org/wiki/VDI

Qjavaのメールクライアント

メールの閲覧ができるプログラムを作成していますが閲覧ができずエラーが出てしまいます。
正しいソースコードを教えてください。

import java.io.*;
import java.net.*;
public class mail2 {
public static void main(String args[]) throws IOException {
String server,user,pass,str,num;
int port = 110;
StringBuffer sb = new StringBuffer("");
Socket sock;
BufferedReader sockin;
BufferedWriter sockout;

System.out.println("サーバーを入力");
BufferedReader serverin = new BufferedReader(new InputStreamReader(System.in));
server = serverin.readLine();

System.out.println("ユーザーを入力");
BufferedReader userin = new BufferedReader(new InputStreamReader(System.in));
user = userin.readLine();

System.out.println("パスワードを入力");
BufferedReader passin = new BufferedReader(new InputStreamReader(System.in));
pass = passin.readLine();

try {
sock = new Socket(server, port);
sockin = new BufferedReader(new InputStreamReader(sock.getInputStream()));
sockout = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));

sockout.write("USER " + user + "\r\n");
sockout.flush();
sockout.write("PASS " + pass + "\r\n");
sockout.flush();
sockout.write("LIST\r\n");
sockout.flush();
sockout.write("QUIT\r\n");
sockout.flush();

while ((str = sockin.readLine()) != null) {
System.out.println(str);
}

sock.close();

} catch (Exception ex) {
ex.printStackTrace();
}

System.out.println("どのメールを見ますか?");
BufferedReader numin = new BufferedReader(new InputStreamReader(System.in));
num = numin.readLine();

try {
sock = new Socket(server, port);
sockin = new BufferedReader(new InputStreamReader(sock.getInputStream()));
sockout = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));

sockout.write("USER " + user + "\r\n");
sockout.flush();
sockout.write("PASS " + pass + "\r\n");
sockout.flush();
sockout.write("LIST\r\n");
sockout.flush();
sockout.write("QUIT\r\n");
sockout.flush();

while ((str = sockin.readLine()) != null) {
System.out.println(str);
}

sock.close();

} catch (Exception ex) {
ex.printStackTrace();
}

System.out.println("どのメールを見ますか?");
BufferedReader numin = new BufferedReader(new InputStreamReader(System.in));
num = numin.readLine();

try {
sock = new Socket (server, port);
sockin = new BufferedReader(new InputStreamReader(sock.getInputStream()));
sockout = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));

sockout.write("USER " + user + "\r\n");
sockout.flush();
sockout.write("PASS " + pass + "\r\n");
sockout.flush();
sockout.write("RETR " +num+"\r\n");
sockout.flush();
sockout.write("QUIT\r\n");
sockout.flush();

while ((str = sockin.readLine()) != null) {
System.out.println(str);
}

sock.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

メールの閲覧ができるプログラムを作成していますが閲覧ができずエラーが出てしまいます。
正しいソースコードを教えてください。

import java.io.*;
import java.net.*;
public class mail2 {
public static void main(String args[]) throws IOException {
String server,user,pass,str,num;
int port = 110;
StringBuffer sb = new StringBuffer("");
Socket sock;
BufferedReader sockin;
BufferedWriter sockout;

System.out.println("サーバー...続きを読む

Aベストアンサー

たぶん in を close してないのが問題だと思うので、
while のところを下のようにしたらと思います。

while (in.hasNext()) {
String command = in.next();
if (command.equals("q")) { in.close(); break;
}
else if (command.equals("l")) {
to_server.write("LIST\r\n"); to_server.flush();
}
else {
int number = -1;
try { number = new Integer(command); }
catch (Exception e) { continue; }
to_server.write("RETR " + number + "\r\n"); to_server.flush();
}
while (accept.hasNext()) { System.out.println(accept.nextLine()); }
}

たぶん in を close してないのが問題だと思うので、
while のところを下のようにしたらと思います。

while (in.hasNext()) {
String command = in.next();
if (command.equals("q")) { in.close(); break;
}
else if (command.equals("l")) {
to_server.write("LIST\r\n"); to_server.flush(); ...続きを読む


人気Q&Aランキング

おすすめ情報