• ベストアンサー

ソケットプログラミングについて

ソケットプログラミング(ネットワーク?)をはじめようと思うのですが(使用する言語はCあるいはC++) その場合のOSとして UNIX、Linux、Windows のどれが適しているでしょうか ちなみに、メールサーバや、APACHの様なHTTPサーバを作れる様にまでなりたいです (その他にもFTP等) ちなみに私はUNIXや、Linuxだと思っていますが、Windows との文法の違いはどれくらいあるのでしょうか

  • tukai
  • お礼率57% (102/177)

質問者が選んだベストアンサー

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.5

私もunix(≒linux)をすすめます。 単純にソケット作って、send,recv程度なら違いはそれほどは無いと思いますが、 非同期に動かすとか、サーバーでスレッドなりプロセスなりがからんでくると、OSの違いや、OSの一部であるunixソケットとライブラリ(?)であるwinsockの違いがいろいろと出てきます。 ソケットそのものの違いというより、OSの違いの影響が大きいという感じです。 ソケットを使うなら、資料等もunix側の方が豊富でしょうから、unix側をすすめます。 Windowsだと純粋なsocket(winsock)よりクラスライブラリなんかの方が豊富な感じがしますし、それだと作るのは簡単になりますが細かいことが出来ない、わからないとか出てくると思いますので、 最終目標がサーバー作成にあるなら変にラップされているものは避けておいたが方がいいかも知れません。 あと、winsockは.NET 2003とMSDN入れていても日本語のヘルプが無かったりしますし。 まあ、unixも日本語マニュアルない場合もありますが。 あとは、socketそのものだけでなくTCP/IPについてもよく知っている必要があると思います。 一応、unix,windows,他各種OSでプログラム経験有り。

tukai
質問者

お礼

大変参考になる意見をありがとうございます。 呼び出すAPIが同じという事は、UNIXの書籍でも、LINUXが学べるという事でしょうか わかりやすい質問をありがとうございました

その他の回答 (5)

  • joe-
  • ベストアンサー率34% (11/32)
回答No.6

とりあえず、ご自身が使いやすいOSで書いてみてはどうでしょうか? インターネットの構造として通信相手のOSはあまり関係なく、通信の行い方の根本は一緒なので、APIが多少違っても裏でやっていることは大体一緒な事が多いです。 以下のサイトにlinuxとwinsockで簡単なHTTPサーバのサンプルプログラムがあるのでとりあえず、両方で書いてみてはどうでしょうか? http://www.geekpage.jp/programming/linux-network/ http://www.geekpage.jp/programming/winsock/ 書いて試してみて気に入った方を掘り下げていくのが良いと思います。

tukai
質問者

お礼

有難うございました。 サーバのサンプルは大変参考になりました。

  • aozola
  • ベストアンサー率12% (72/563)
回答No.4

UNIX系(Linuxも含む)、のほうがいいと思いますよ、ウインドウズだとツールを買わないといけない事が多いですし、ツールを使うと内部をツールが勝手にやってしまって、あんまりわからないときがありますから、学習には向いてないかなと思います。

tukai
質問者

お礼

ツールですか・・・・ 現在はボーランド(無料)のC/C++コンパイラがありますが それ以外に何か必要なのでしょうか

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

一応個人的な見解ということになりますが。 >UNIX、Linux、Windows >のどれが適しているでしょうか Unix(linux含む)が適しています。 >ちなみに私はUNIXや、Linuxだと思っていますが、Windowsとの文法の違いはどれくらいあるのでしょうか 文法の違いと言うよりは、呼び出すAPI(システムコール又は共通サブルーチン)が異なります。 UnixとLinuxの場合は、呼び出すAPIがおなじものですが、Windowsの場合は、Winsockといって全くべつものになります。Windowsに関するプログラミングを相当された方でないなら、Unix(linux)でソケットプログラミングから入られた方が敷居が低くなります。 上記の理由から、Unix(linux)で勉強されることを薦めます。

tukai
質問者

お礼

APIの違いですか・・・ とりあいず、WinSockの方をやってから、UNIXの方のAPI(Berkele API?)をやってみたいと思います 質問に答えてくださりありがとう御座います

noname#25358
noname#25358
回答No.2

 昔は UNIX、Linux 系でなければ駄目だと言われていましたが、これは単にOSの安定性能に関して不安があったからです。  現在では、どれで作っても構いません。安定性能はプログラマーの能力で決まります。  文法とは言語レベルで変わるものですので、OSレベルでの文法の違いというのは答えられません。  質問の本質としては、「どのような環境の方が作りやすいか」でしょうか?  もしそうならば、ウィンドウズの方がより製作環境を構築しやすいかと。

tukai
質問者

お礼

質問に答えてくださりありがとう御座いました WinSockでやる事も考えておきたいと思います

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

はあ? どれでもいいよ。それより >ソケットプログラミング(ネットワーク?)をはじめようと思うのですが(使用する言語はCあるいはC++) >その場合のOSとしてUNIX、Linux、Windowsのどれが適しているでしょうか これを聞くことからして何かあなたは勘違いしていると思います。 ネットワーク上の通信は、相手先のOSが何であるかを意識させないように作っているのに、相反する事を聞いているので開発者としては悲しい限りです。 >UNIXや、Linuxだと思っていますが、Windows との文法の違いはどれくらいあるのでしょうか コンパイラや、ヘッダの違いくらいです。 そんなに大した違いは無いけどエンディアンはひっくり返ってる機種も有ります。(INTEL系は特に)

tukai
質問者

お礼

私がいいたいのは、どれで作るかに適しているかではなく、どの環境で動かすのがいいかです。 判りやすい回答をありがとう御座いました

関連するQ&A

  • ソケットプログラミングって??

    現在ソケットプログラミングを勉強していますが、いまいち利点がわかりません。これをつかって自宅サーバーとかって作るんでしょうか?ソケットプログラミングで何ができるんでしょうか?(自宅でやれることってあるのでしょうか?) お願いします。ちなみにLinuxを使ってCで打っています。

  • プロクシ(多段プロクシ)を使う場合のソケット/HTTPプログラミングについて

    プロクシ(多段プロキシ)を使う場合のソケット/HTTPプログラミングについて 教えてください。 以下のような構成になっている場合 ┌---┐ ┌-------┐ ┌--------┐ │プログ│⇒│プロクシサーバ │⇒│ターゲットサーバ │ │ラムχ│ │proxy.com:8080 │ │target.co.jp:80   │ └---┘ └------─┘ └--------┘ ソケットプログラミングでHTTPを操ろうとしたら、以下のようになると思います。 1)proxy.comのポート8080をオープンする 2)proxy.comに送信するHTTPリクエストを以下のようにする。  GET http://target.co.jp/index.html HTTP/1.1  Host: target.co.jp:80  (以下略) では、これがプロクシが一段ではなくて多段だった場合、 例えば以下のような構成の場合、どうソケットプログミングを書けばよいのでしょう? ┌---┐ ┌-------┐ ┌-------┐ ┌--------┐ │プログ│⇒│プロクシサーバ │⇒│プロクシサーバ │⇒│ターゲットサーバ│ │ラムχ│ │prxy1.com:8080 │ │prxy2.com:8080 │ │target.co.jp:80   │ └---┘ └-------┘ └-------┘ └-------─┘ HTTPとソケットプログラミングに詳しい方、ご教授ください。 記述言語の想定はCですが、特にJavaでもPerlでも構いません。 よろしくお願いします。

  • c言語ネットワークプログラミングのAPIを乗せているwebページないですか?

    現在私はC言語でソケット通信を使って サーバとクライアントでメッセージのやり取りをおこなってみたいと思っているのですが どのライブラリのどの関数を使って通信できるのか全くわかりません。 (例えば、readの返り値ってなにを返すんだろう?とか) できればunix上(SunOS)でのc言語ネットワークプログラミングに関する APIが乗っているURLを教えていただけないでしょうか?(できれば日本語のwebページがいいです。)

  • ネットワークプログラミングについて

    もしかしたらカテ違いかもしれません もしそうだったらすいません 僕は今ネットワークプログラミングの勉強をしています。 c言語で行なっています 使っている環境はUNIXです ソケットプログラミングをしています。 今POP3サーバへアクセスするプログラムを書いています。 ここで質問です ドメインネームからIPアドレスを参照して サーバへつなぐ場合 hostent構造体へホスト情報を格納して そのメンバである *h_addr_list[] にアドレスが格納されているらしい までは調べました。 複数のアドレスが記憶できるようになっているみたいですが それはなぜなのでしょう? また実際にアドレスを格納した時、複数のアドレスが入っている場合はどれを使って通信すれば良いのでしょうか? よろしくおねがいします

  • ネットワークプログラミングにおいてsendto()ってブロックするの??

    C言語でネットワークプログラミング(ストリーミングのプログラムを作成しました) UDPを使用したプログラミングなのですが、サーバ側でデータを送るのが途中でいったん停止することがあるんです。数秒停止してまた送る。 もしクライアント側で何か処理が止まったときに、 ソケットのsendto(。。。。。)がブロックするのであればそのエラーもなっとくいくのですが。 sendtoってブロックするのでしょうか?? recvfrom()はソケットディスクリプタに応答があるまでブロックするのはわかるのですが・・・。sendtoはお構いなしに送信するんだったと思うのですが。 環境はサーバ、クライアントマシンともにlinux7.2です。

  • Macでのソケットプログラミング(ネットワークプログラミング)

    Macでネットワークプログラミング(UNIXベースのため)をしようと思っているのですが、サーバプログラムを作り実行したところ、「bind : Can't assign requested address」と出てしまい、実行することができません。 コンパイル時にエラーは出なかったので、プログラム自体にミスはないと思います。 ちなみにOSのバージョンはOS X Tiger 10.4.6です。 どなたか詳しい方、教えて下さい。

  • プログラミングする環境の整え方

     Windowsのノートパソコンで、C言語を使ってプログラミングを したいと思うのですが、そうできる環境の整え方が、分からなくて 困っています。  学校でC言語を使ったときは、WindowsのデスクトップにUNIX のlogin画面があって、エディタはmuleというソフトを使っていました。  家でC言語を使いたいときは、どうすればいいのか、例えば、 市販のテキストを見ても、いきなりプログラミングの書き方から入っていて、 その前の設定についての記述はなかなか見当たりません。  分かりやすく丁寧に教えていただけたら幸いです。  どうぞ、よろしくお願いいたします。

  • プログラミングについてです。お願いします。

    動画と静止画をうまい具合につなげたいのです。UNIXでC言語を使ってプログラミングしなくてはいけないのですが全く分かりません。誰か教えてください。お願いします。

  • ソケットプログラミングについて

    こんにちは。 前回、質問しました「バード」という者です。 ソケットプログラミングについて質問します。 PC1から、jpegやmpegファイルを送信しPC2で受信するというプログラムをC言語で作ってみたいと思っています。 以前、少しだけJAVAプログラミングでPC1(送信側)からPC2(受信側)へデータを送信するプログラムを作ったのですが、作ったプログラムの概要を以下に示します。 [送信側] (ファイルオープン) InputStream in = new FileInputStream(ss); BufferedInputStream bin = new BufferedInputStream(in); ↓ (データを読みsendメソッドにて随時送信) while((c = bin.read(buffer, 0, buffer.length))!=-1){ dPacket = new DatagramPacket(buffer,buffer.length,iAddress,port); dSocket.send(dPacket); } ↓ (ファイルとソケットクローズ) dSocket.close(); [受信側] (ファイルオープン) OutputStream out = new FileOutputStream(args[1]); BufferedOutputStream bout = new BufferedOutputStream(out); ↓ (送信側から来たデータをreceiveメソッドにて受信) while(true){ dPacket = new DatagramPacket(buffer,buffer.length); dSocket.receive(dPacket); } ↓ (ファイルとソケットクローズ) dSocket.close(); 上記に示す様に、ファイルをオープンし、DatagramSocketとDatagramPacketクラスを用いて送受信し最後に、ファイルをクローズするという形式をとっていました。 C言語の場合でも、ファイルオープン→send関数,receive関数等を用いて送信・受信→ファイルクローズという形をとる事ができるのでしょうか?FTPプログラムやエコープログラムを、よく見かけるのですが・・・・

  • C言語においてUniとLinの違い

    C言語でプログラミングをする際、UnixとLinuxの違いを教えてください これから勉強しようと思うのですが、どちらを先に覚えれば後々スムーズに行くでしょか。

専門家に質問してみよう