• 締切済み

winsock APIをUNIXで

初めて質問させて頂きます。 winsock APIの重複I/O(WSARecv,WSASend)、イベントシグナル(WSAWaitForMultiplrEvnts)に変わるものをUNIX(サーバー側)で実現させたいと考えております。 fcntl,select関数を使って実現出来るようなのですが、サンプルとなるソースが無く使い方がよく分かりません。 お分かりの方、ご教授お願い致します。 それと参考になるページ、本がありましたらあわせて教えて頂けると助かります。

  • riooo
  • お礼率100% (2/2)

みんなの回答

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.2

Webページなら、こちらの「2.1」あたりが参考になりませんか? http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html こちらのFAQもご参考に。 http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja.html

参考URL:
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html
riooo
質問者

お礼

回答ありがとうございました。 これを参考に何とか頑張ってみます。 それにしても知らない人に気軽にアドバイスを頂けるなんてとっても便利な時代です。 movingwalkさんとこの時代に感謝です。

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.1

QNo.396855でも回答しましたが、参考となる本ならこれでしょう。 (書籍) UNIXネットワークプログラミング 第2版 Vol.1 第6章I/Oの多重化:select関数とpoll関数

参考URL:
http://www.pearsoned.co.jp/washo/network/wa_net28-j.html
riooo
質問者

お礼

早速の回答ありがとうございます。 あす本屋をのぞこうと思います

関連するQ&A

  • Winsockコントロールを使用してマルチキャスト通信

    まずは環境を WindowsXPSP2、VisualBasic6.0SP6です。 目的はサーバがマルチキャスト配信しているのを VBのクライアントがWinsockコントロールを使用して受信する方法を教えていただきたいのです。 Winsockコントロールを使用してUDPでの通信ができたのですが WinsockコントロールにはCの「setsockopt」に該当する命令が無い(わからない)のです。 Winsockコントロールで実現できないのであれば winsockのAPIを使用する方法でもかまわないのですが APIの情報も見つからず困っています。 APIを実装しても「IPPROTO_IP」「IP_ADD_MEMBERSHIP」などの定数の定義の情報がなくわからないのです。 これらの情報が載っているページや、解説しているページがあればお教えください。 または実装方法を知っておられるならお教えください。 よろしくお願いします。

  • VB(Windows)からUNIXマシンのプログラムを起動?

    ソケット通信のアプリを作りたいのですが、よろしかったらご指導ください。 VB(Windows)からUNIXマシンのプログラムを起動するにはどうすれば良いのでしょうか。 WinSockを使ったサンプルソースが見れるサイトを知っていたら教えてください。 また良い書籍などあれば教えてください。

  • Winsockを使わずにVBでSocketを利用したい

    Winsockを使わずにVBでSocketを利用したいと考えています.事情がありましてコンポーネントを使わずにSocket通信でサーバープログラムと通信を行いたいです. APIなどでSocket関係の関数は用意されているのでしょうか? 宜しくお願いします. OS:Windows2000+SP4 Visual Basic 6.0+SP5

  • UDP/IPでのソケット作成について(winsock)

    UDP/IPでのソケット作成について(winsock) 開発環境VC++.NET、O/S WIN2000にてソケットプログラミング(winsock2.0)をしています。 コンソールプログラミングではありませんが、WindProcは持っていません。 UDPサーバーを作り、複数クライアントの対応をしたいと考えています。 クライアントAからの通信やりとり中に クライアントBからの通信がきたら、そちらとも通信やりとりを(自動で)行いたい。 ここで問題なのが、クライアントAの要求ポートが15000で、 クライアントBの要求ポートも15000なのです。 同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、 やり方を工夫すれば、同一ポートでの複数クライアント対応は可能なのでしょうか。不可能なのでしょうか。 可能であれば、やり方、ヒント等教えてください。よろしくお願いします。 追記 (1)TCP/IPでは、同一ポートでソケット作成が可能でした。ネットで探したサンプルプログラムが  そのような動きをしていたのですが、UDPに書換えることはできませんでした。  http://eternalwindows.jp/network/winsock/winsock04s.html (2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が  上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、  fork()と同様の処理が可能になり、目的が達成できるでしょうか。

  • Winsockの通信処理にてファイル転送方法?

    環境:Windows2000とUNIXサーバ 開発:VisualStadioVer6.0 言語:C言語 やりたいこと:    クライアントからサーバにファイル送信を行う。 ただし、FTP通信を使わないで、別ポートにて、Winsockの send等でFTPもどきのファイル送信を行いたい。 ソケット通信はデータ送信なのは知っているのですが、 どうしても実現したいので、知ってる方は教えてください。

  • PHPで、楽天APIを自動更新させるプログラムを作りたい。

    PHPで、楽天APIを自動更新させるプログラムを作りたい。 今のところ、考えられる方法としては、タイマーイベントで更新させるか、HPにアクセスされた時に更新するかの何れかと思います。 しかし、どの様に実現させたらいいのか見当が付きません。 何か良いサンプルなどを、教えて下さい。

    • ベストアンサー
    • PHP
  • VC++2008Expressでwin32appとwinsockの勉強

    VC++2008Expressでwin32appとwinsockの勉強の為にネットワークゲームを作ろうと思ってます。 winsockについて色々調べているうちに、疑問がわいたので質問します。 実現したいのは、サーバーとクライアントが1:Nのネットワークゲームです。 プレイヤーはサーバーに接続し、部屋に入ります。 誰かが初めて部屋に入ったら、サーバー側で部屋を用意します。(複数の部屋が立つこともあります) サーバー側で用意された部屋は、タイマーのイベントで部屋の状況データが変ります。 また、部屋にいるプレイヤーがアクションを起こす度に、サーバーの状況データが変ります。 その状況データを部屋に居る1人以上のプレイヤーで参照し共有します。 またプレイヤーデータはサーバー側で全部を一括管理します。 このような、プログラムを作りたいと思ってるんですが、 例えばサーバー側でwinsockは待ちうけ(accept)の所でプログラムは止まってしまいますよね。 クライアント側では受信(recv)の所で止まりますよね。 サーバー側やクライアント側で通信を待ち受けながら、 タイマーやマウスクリックに対するイベント処理を同時に行うことは可能なんでしょうか。 出来るとしたら、どのような仕組みにする必要があるでしょうか。 よろしくお願いします。m(_ _)m

  • JAVAであるAPIの使い方

    JAVA初心者です。 あるブループウェアの連携APIを使うことになってしまったのですが、 (そのため現在JAVA入門から勉強しています) サンプルプログラムを動かすことはできました。 多分新しく作ったクラスにJARファイルを追加?することになると思い、 まず試しにJARファイルを解凍して同じファイル(ファルダ)構成で再びJARファイルを作りました。 コマンド:jar cmf garoon3api\META-INF\MANIFEST.MF garoon3api.jar garoon33api すると、サンプルプログラムは動きませんでした。 C:\java\garoon>java -cp garoon3api.jar com.cybozu.garoon3.usecase.GetUser -g log in.ini -i inG.csv -o outG.csv Exception in thread "main" java.lang.NoClassDefFoundError: com/cybozu/garoon3/us ecase/GetUser Caused by: java.lang.ClassNotFoundException: com.cybozu.garoon3.usecase.GetUser at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: com.cybozu.garoon3.usecase.GetUser. Program will exit. 何がおかしいのでしょうか? どなたか教えて下さい。 また参考となるHPとかあれば教えてください。 よろしくお願い致します。

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

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

  • VB2005でWin32APIを用いてRS-232CのRTS信号を、デ

    VB2005でWin32APIを用いてRS-232CのRTS信号を、データ送信中だけHIGHにさせるプログラムを作成中です。 色々調べて、Win32APIを使うことで、それらしい動作をさせるプログラムを作れることが分かり、色々調べてコーディングしたのですが、上手く動きません…。処理の流れは以下のようになっています。 (1) CreateFile()関数でCOMを開く。   (CreateFile()の「フラグ」には"FILE_FLAG_OVERLAPPED"を指定) (2) CreateEvent()関数にてイベントオブジェクトを作成。 (3) EscapeCommFunction()でRTS信号をHIGHに設定。 (4) WriteFile()関数でRS-232Cへデータを送信する。 ※ここまでは、オシロスコープにて正しく動作していることを確認しています。 (5) データ送信完了を待つために、SetCommEvent()関数で"EV_TXEMPTY"イベントマスクをセット。 (6) WaitCommEvent()で送信完了を待つ。   ⇒WaitCommEvent()関数が、データ送信完了を待たずに抜けてきてしまう(Falseがリターンされる)…。 (7) そこで、WaitForSingleObject()を使ってイベントハンドラが"シグナル状態"になるのを待つ。   ⇒タイムアウトに"INFINITE"を指定すると、無限待ち状態に陥ってしまう。   ⇒また、タイムアウトに"1000"を指定すると、約1秒後に"WAIT_TIMEOUT"が返ってきてしまう。 WriteFile()関数、そしてWaitCommEvent()関数の引数には、OVERLAPPED構造体へのポインタを渡しているのですが、思うように動いてくれません。 ※Win32APIの関数宣言の記述方法(データ型など)が誤って、このようになっていたりするのでしょうか… どなたかヒントでもお教えいただけると、大変助かります。 以上、よろしくお願いいたします。