• ベストアンサー

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

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

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

  • ベストアンサー
回答No.1

ネットワークプログラムが組めます。 メッセンジャーなど またはネットワークプログラムでも クライアントサーバプログラムも組めます。 今はやりのオンラインゲームはその良い例ですね。 ようはネットワーク上でデータをやりとりを するための仕組みです。 どんなことができるか作るかはアイディア次第で 今までにないものも作れると思います。

MASA_55_ku
質問者

補足

メッセンジャーが作れるんですが、すごいですね。ありがとうございます。自宅でサーバーを作るときにもこのソケットプログラミングが必要でしょうか?

その他の回答 (5)

  • moritan2
  • ベストアンサー率25% (168/670)
回答No.6

仕事で対戦ゲームのサーバーのプログラミングをしている者です。 対戦ゲームのサーバーはsocket利用の典型例だと思います。これが例えばwebサーバーやメールサーバーを作るのなら、apacheやpostfixなどよく出来たサーバーが世の中にはたくさんありますから、なにも自分でsocketのプログラミングをしなくてもいいわけですが、対戦ゲームサーバーは現時点では標準のプロトコルなどが存在するわけではありませんから、本当にやりたい事をしたいなら、サーバーは自分で書くしかありません。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.5

利点欠点という問題ではないのですが。 ネットワーク系のプログラムを書くには、ソケットを使う以外に手段はありません(一部、ソケットではなくTLIという別の抽象化を使うOSもありますが)。ファイルを読み書きしたければファイルディスクリプタ(あるいは FILEポインタ)を使すしかないのと同じです。  ソケットサービスをすっ飛ばしてネットワークを直接操作しようとしても、結局「raw socket」という種類のソケットを使わないといけません。  UNIX系のOSではプロセス間通信もソケットを使うことになっているものがありますね。

  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.4

ソケットっていうのは通信の基本インターフェースです。 通信のプロトコルもAsyncだとか色々ありますが、 ソケットはTCP/IPのインターフェースです。 それで、ソケットがなければTCP/IPの通信部分も自前で作成しないといけません。 とてもじゃないが、やることが増えすぎて大変です。 動作が保証されているソケットを使えば、 そういう下部組織のことは意識しないで済みます。 ソケットに限らず、コンピュータでもC言語でも 下部のことを意識しないで済む仕組みはいくらでもありますよ。

MASA_55_ku
質問者

お礼

ありがとうございます。いろいろとわかってきました。

回答No.3

>プログラム同士のデータの受け渡しは、ファイルで行う等の方法があります。 ソケットプログラムと同じようにお互いが起動していて 協調しあって動作させるならプロセス間通信が 一般的だと思いますよ。

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

データ通信を行うことができます。 これは、コンピュータ同士のデータ通信です。 1つのコンピュータないであれば、プログラム同士のデータの受け渡しは、ファイルで行う等の方法があります。従ってその場合は、ソケットプログラミングは(その方法でも可能ですが)必要ありません。ところが、コンピュータ外のプログラムと交信をする場合は、ソケットプログラミング以外に選択子はありません。今、あなたが、ここに質問し、ここに私が回答を書いていますが、この仕組みもソケットプログラミングで、作成されています。

MASA_55_ku
質問者

お礼

ありがとうございます。いろんなところに使われているんですね。

関連するQ&A

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

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

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

    こんにちは。 私は、ソケットプログラミングを行ってみようとしています。 ソケットプログラミングはほぼ、初めてでして、LinuxソケットかWindowsソケットのどちらを使用すればよいのでしょうか?

  • ソケットのrecvの戻り値が0

    linuxにてソケットの勉強をしようと思い、 簡単なソケット通信のプログラムをCで組みました。 ret = recv(ID, Buff, sizeof(Buff), 0); といった感じでサーバ側を組んだのですが、 この戻り値retに0が入ることがあり、思うように動いてくれません。 私の認識だと、recvは受信するまで待ち、 受信したサイズを返すと思っているのですが、 それが0とは、いったいどういう意味を持つのでしょうか?

  • UDPのソケットプログラミング

    ソケットプログラミングでの質問です. 初心者です. UDPクライアントで sock = socket(PF_INET,SOCK_DGRAM,0) でUDPソケットを生成した後に bind()なしで,UDPサーバ宛にsendto() を行った場合, サーバのrecvfrom()でクライアントの IPアドレスとポート番号が受け取ることができると思いますが ここでのIPアドレスはクライアントのアドレスで, ポート番号は他のクライアントの他ソケットが使用していないポート番号 が受け取ることができると考えてよろしいですか? クライアントのsendto()で自動的にポート番号が割り当てられるが, クライアントが,どのポートから送信したのかを知る方法はないですか?

  • ソケットプログラミングにおけるワイド文字の送信方法

    C/C++におけるソケットプログラミングでのワイド文字の送信はどうすればよいのでしょうか?

  • ネットワークプログラミングの本を教えてください

    お世話になります。 「ネットワークプログラミング」の良書を教えてください。 よろしくお願いします。 Cを本格的に勉強して1ヶ月で、やっと「独習C」が終わりました。 いまK&Rを読んでいます。アセンブリも勉強中です。 Linux は 自宅で centOS5 と XP を繋いで実験しています。 TCP/IP は解ります。 もっとも興味があるのはセキュリティなので、 いずれサーバサイドJavaをやりたいと思っています。 その前にもう少しみっちりとCをやろうと思いますが、 ゲームには興味がありません。 そこでネットワーク関係でやろうと思っています。 Windows/UNIX に関わらず、読まれて参考になった本をご紹介下さい。

  • プログラミングはwindowsかlinuxか?

    プログラミングするにはwindowsよりlinuxのほうがよいとの話を聞いたのですが、どうなんでしょうか?個人的にはlinuxにできてwindowsにはできないことはほとんどないのであまりOSの差は関係ないのでは?とおもうのですが。 なにかlinuxのプログラミングに関してOSとしての利点はあるのでしょうか?

  • Linux+GCCで、ソケットプログラム

    お世話になっております。 Linux<-->Win間で、データ送受信するプログラムを作りたいと思っています。 現在は、Win<-->Win間でWinSockを使ったプログラムがほぼ完成していますが、次の方向性としてLinux<-->Win間ソケットプログラムなのです。将来的には、組み込みPCとしてつかいたいのです。 DOSの頃(8年前くらい)にC言語はやっていたので、C言語は多少は覚えていますが、Linuxを使った事が無い、GCCの経験が無いので、OSの選択やGCC(特にソケット)に関する勉強をしなければなりません。 そこで、こういったジャンルを勉強できる本を探しているのですが、皆さんのお勧めは無いでしょうか?

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

    こんにちは。 前回、質問しました「バード」という者です。 ソケットプログラミングについて質問します。 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プログラムやエコープログラムを、よく見かけるのですが・・・・

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

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

専門家に質問してみよう