簡単なソケットプログラムを作ろうとしておりまして、サイトで調べたりしておりましたところ、なんとか分かってきたのですが、ひとつどうしてもわからないことがありますので教えていただけますでしょうか。
ソケットから受信するメッセージの生成のところなんですが、
「WSAAsyncSelect(m_socket,m_hWnd,WM_USER_ASYNC_SELECT,FD_READ | FD_WRITE)」
で、2番目の引数「m_hWnd」がわかりません。
教えていただけないでしょうか?よろしくお願いします。

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

A 回答 (3件)

こちらの「III.非同期ソケット通信」のところが参考になりませんか?


WSAAsyncSelect()で、例えば受信データありの場合にイベントとして通知する
ウィンドウのハンドルをここに記述しておき、そのウィンドウのイベント
ハンドラで受信処理を行なうようなプログラミングを可能にします。
http://yonex1.cis.ibaraki.ac.jp/~yonekura/2002ka …

参考URL:http://yonex1.cis.ibaraki.ac.jp/~yonekura/2002ka …
    • good
    • 0

・・・あ、なんか、ちがう本書いてもた。


こっちだ。
「インターネットのためのWinsockプログラミング」

参考URL:https://www.amazon.co.jp/exec/obidos/ASIN/477410 …
    • good
    • 0

接続イベント(FD_CONNECT)、受信イベント(FD_READ)、送信イベント(FD_WRITE)、


切断イベント(FD_CLOSE)の発生を伝えるWindowハンドルを指定します。

むか~しこの本を読みました。「WinSockによるWindowsネットワークプログラミング 」

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4756116 …
    • good
    • 0

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

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

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

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

QE39Aに適合するショックアブソーバ

ご存知の方がいれば、教えてください。
E39A(VR4)のショックアブソーバを社外品に交換しようと考えてます。
候補はカヤバのNEW SR SPECIALを考えています。しかしながら、メーカホームページには90年7月までしか対応できないように記載されており、90年12月登録の私の車には使用できないように見えます。
90年8月以降のE39A(VR4)でNEW SR SPECIALをご利用の方、いらっしゃいませんでしょうか。また、利用可否をご存知の方いらっしゃいませんでしょうか。事情があり、早急に知りたいと考えております。
何卒、ご回答のほどよろしくお願いいたします。

Aベストアンサー

古いGABのカタログで調べたところ(95,97年)、E39AギャランVR4は 87/10~92/3まで同じショックアブソーバーで大丈夫だと思います。

KYBのカタログが無いので、はっきりは分かりませんが、ABSが付いていたら、配線を留めるブラケットが無いのかもしれません。

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

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

Aベストアンサー

そういえば、これは listen する側のソケットですよね?

だとすると

sin.sin_addr.s_addr = INADDR_ANY;

ではないのかな?

それと念のため

bzero( (char*) &serv, sizeof(serv) );

と最初にしておいた方がいいと思います。

Qselect(ソケット)

ソケットを用いてプログラミングしていると、よく出てくると思うのですが、次の意味を教えてください。
select(SH); $| = 1; select(STDOUT);
$|(特殊記号)やSTDOUTなど、なるべる細かく教えて頂けると幸いです。
よろしくお願いします。

Aベストアンサー

ソケットは効率的な処理をするために通常はバッファリングするモードになっています。
(その都度処理するよりある程度やりとりするデータが溜まってまとめてやったほうが効率的)

これを回避(フラッシュ)したいときにselect(SH)のように
ソケットを選んで$|=1 でフラッシュモードに切り替えています。
詳しくないのですがプログラミングにおいてフラッシュが用いられるのは、ソケット通信で双方向にやり取りするときが多いと思います。
ちなみにソケットをclose(SH)すると自動的にフラッシュしてくれます。

また、デフォルトではSTDOUTが選択状態になっていますので
> print "hello.\n";

> print STDOUT "hello.\n";
の省略形というわけです。

余談ですが、Perl使いは面倒くさがりが多いので慣用句みたいに
> select((select(SH),$|=1)[0]);
と、まとめて書く人もいます。
これはselectが返す値が直前まで選択されていたソケットだからできる技です。

ソケットは効率的な処理をするために通常はバッファリングするモードになっています。
(その都度処理するよりある程度やりとりするデータが溜まってまとめてやったほうが効率的)

これを回避(フラッシュ)したいときにselect(SH)のように
ソケットを選んで$|=1 でフラッシュモードに切り替えています。
詳しくないのですがプログラミングにおいてフラッシュが用いられるのは、ソケット通信で双方向にやり取りするときが多いと思います。
ちなみにソケットをclose(SH)すると自動的にフラッシュしてくれま...続きを読む

Q簡単なプログラムを作るのですが

2つ以上のソースファイルで構成された、Makefileを用意するというプログラムを作りたいのですがさっぱりわかりません。わかる方いましたらお願いします。

Aベストアンサー

どの辺が分からないのかもう少し整理してから質問するとより良い回答が得られると思いますよ。

とりあえず参考までに。
Makefile の簡単な書き方
http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/makefile.html

参考URL:http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/makefile.html

Qプラグ、ソケットとオス、メスの違い

質問させていただきます。
コネクタを買おうとカタログを見ていたときに
気づいたのですが、
ある商品ではプラグ、ソケットという表記がなされていて、ある商品ではオス、メスという表記がなされていました。
ここで質問なのですが、プラグ、ソケットとオス、メスの違いというのは何なのでしょうか?
よろしくお願いします。

Aベストアンサー

これについては特に決まりはないでしょう。実際私もそれらを扱う仕事をしていますが。同じ物をオスと呼んだりプラグと呼んだりしますし、どちらでも問題なく通用します。また、英語でも図面上にMALE・FEMALE(男性・女性)という表記がある場合もあります。

これは私の個人的な意見で確証はありませんが、プラグ・ソケットというのが多分正式な呼び方でしょう。また、形状によってはソケットを(たとえばフォーンプラグやRCAプラグに対する物)などはジャックと呼ぶ場合もあるようですが、いずれにせよ問題なく通じますの。電気以外でも配管などでも同様な表記をしますし呼び方もします。

技術者の使う用語というのは、結構こう言った一種の業界用語めいたものが多いのです。たとえば少々古いですが半導体素子を「石」と呼んだりします。

Qできるだけ簡単なプログラムを作っていただけませんか?

できるだけ簡単なプログラムを作っていただけませんか?

名前3600名分を読み込み,名前とその文字数,文字数が偶数の人についての人数と平均文字数,文字数が奇数の人についての人数と平均文字数をresult.txtに書き込むプログラムを作りなさい.ただし,以下を守ること.

1 文字数は2ケタ,名前は指定なし,人数は4ケタ,平均文字数は小数点以下3ケタとすること。
2 以下のような実行例にすること。


(例)
[12][IchiroSuzuki]
[ 9][MikeAdmas]
[11][JamesAdduci]
[15][MichaelAffronti]




[14][AkinoriIwamura]
[16][DaisukeMatsuzaka]
guusuu[1809,11.460]
kisuu[1791,11.553]



for文を多用すれば良いのかなと個人的には思うのですがよくわかりません。

Aベストアンサー

どこから読み込むのか不明ですが…forループは1つで充分でしょう。

名前の長さが偶数の場合と奇数の場合での「総文字数」「総数」をカウントする変数を用意。
名前が1行に1つ書かれた入力ファイルがあるならば…
入力ファイルと出力ファイルをオープンして、fgets()で入力ファイルから読み込み。
改行文字を削除した上で文字数をstrlen()で取得。
「総文字数」「総数」の変数に反映した後でfprintf()で出力ファイルに出力。
3600行分処理したら、「総文字数」「総数」から平均を算出するだけです。

QJAVAでソケット通信(クライアント)の際のbind方法

JAVA初心者です。
アクセス元のIPアドレスで認証をしているサイトがあり、
httpアクセスでそこから定期的に情報を取ってくるようなものを
JAVAで作っています。
対象サイトは複数あり、それぞれに許可されているIPアドレスは別になるため、socketを使い、IPアドレスをbindしたいのですがうまくいきません。

~~前略~~
Socket socket = new Socket(Host, 80);
bind(socket,"IPアドレス");
~~後略~~

もしくは
~~前略~~
Socket socket = new Socket();
bind(socket,"IPアドレス");
~~後略~~

など、いずれもうまくいきません。なお、クライアントマシンには使用するIPアドレスは全て定義済みです。
また、アクセス元(JAVAが動くPC)のIPアドレスを指定せず
デフォルトのままでアクセスする事自体は
~~前略~~
// Hostの内容はyahoo.co.jp等特にアクセスの制限の無いサイトのもの
Socket socket = new Socket(Host, 80);
~~後略~~
とすることで接続出来ました。

皆さんの知恵を貸していただければと思います。
アドバイスよろしくお願いいたします。

JAVA初心者です。
アクセス元のIPアドレスで認証をしているサイトがあり、
httpアクセスでそこから定期的に情報を取ってくるようなものを
JAVAで作っています。
対象サイトは複数あり、それぞれに許可されているIPアドレスは別になるため、socketを使い、IPアドレスをbindしたいのですがうまくいきません。

~~前略~~
Socket socket = new Socket(Host, 80);
bind(socket,"IPアドレス");
~~後略~~

もしくは
~~前略~~
Socket socket = new Socket();
bind(socket,"IPアドレス");
~~...続きを読む

Aベストアンサー

> ~~処理~~
ここがどうなっているのか分からないので、何とも言えないのですが、
単にBind、Connectするだけなら以下の通りです。

//ホスト名(xxxx)、ポート番号(yy)からアドレスを作る
InetAddress a = InetAddress.getByName("xxxx");
InetSocketAddress b = new InetSocketAddress(a, yy);
//ソケットを作る
Socket s = new Socket();
s.bind(b);  //Bindの例
s.connect(b); //Connectの例

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

こんにちは。
前回、質問しました「バード」という者です。
ソケットプログラミングについて質問します。

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プログラムやエコープログラムを、よく見かけるのですが・・・・

こんにちは。
前回、質問しました「バード」という者です。
ソケットプログラミングについて質問します。

PC1から、jpegやmpegファイルを送信しPC2で受信するというプログラムをC言語で作ってみたいと思っています。

以前、少しだけJAVAプログラミングでPC1(送信側)からPC2(受信側)へデータを送信するプログラムを作ったのですが、作ったプログラムの概要を以下に示します。

[送信側]
(ファイルオープン)
InputStream in = new FileInputStream(ss);
BufferedInputStream bin = new BufferedInputS...続きを読む

Aベストアンサー

ソケット通信の基本は変わりません。
ソケットオープン→send|recvで送信|受信→ソケットクローズです。
CではWinSockを使うことになると思います。
いろいろサンプルのあるページはありますので参考に作ってみてください。

参考URL:http://www.02.246.ne.jp/~torutk/cxx/socket/win32_socket.html

QAndroid Socket.connectエラー

Androidでソケット通信するプログラムを作っています。

PC側がソケットサーバーをたてて(accept)、
Android側でクライアントとして接続(connect)するようにしています。

connectを実行している部分のソースは以下のようにしています。

-----------------
String ip = "192.168.XX.XX"; <-PCのIPアドレス
int port = 9999;

socket = new Socket();
InetSocketAddress addr = new InetSocketAddress(ip, port);
try{
socket.connect(addr);
return true;

}catch(IOException e){
e.printStackTrace();
return false;
}
------------------

上記やり方でまずはエミュレータで試したところうまく行きました、その後
実機に入れて同じように実行したところconnectのところで例外が飛んできます。
メッセージは"no route to host"でした。

実は全く同じソースで以前は実機でもできていたはずなんですが、
最近試したところできなくなっているようでした。

Android端末はXperia Arcですが、OSを2.3.4にバージョンアップしたことくらいで
以前と特に変わったところはないと思うのですが

原因として何が考えられるでしょうか?
よろしくおねがいします。

Androidでソケット通信するプログラムを作っています。

PC側がソケットサーバーをたてて(accept)、
Android側でクライアントとして接続(connect)するようにしています。

connectを実行している部分のソースは以下のようにしています。

-----------------
String ip = "192.168.XX.XX"; <-PCのIPアドレス
int port = 9999;

socket = new Socket();
InetSocketAddress addr = new InetSocketAddress(ip, port);
try{
socket.connect(addr);
return true;

}catch(IOException ...続きを読む

Aベストアンサー

無線LANで接続してないからですよ。

通常はUSBでの通信はフラッシュメモリと同じ扱いなので。

もし本当にUSBで以前できたなら擬似ロケーションの設定等をみてください。

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

前回、ここで質問しましたが質問内容がきちんと記述できていなかったので、もう一度質問させていただきます。

[行いたいこと(概要)]
PC1(送信端末)に保存されているファイル(jpeg,mpegファイル等)をUDPを使ってPC2(受信端末)へ送信し、PC2側でファイルを開くということです。


[現在、試していること]
インターネットや本でもエコープログラミングしかサンプルプログラムがなく、実際どのようにすればよいか分かっていない状況です。以下に、プログラム内容を示します。


PC1(送信端末側)
//ファイル名を入力し、ファイルをバイナリ形式で読み込み、sendto関数を用いて送信する。
FILE *fp;

printf("送信ファイル名を入力:");
scanf("%s",&fname);
if((fp = fopen(fname,"rb")) == NULL){
fprintf(stdout,"ファイルを開く際にエラーが発生しました\n");
exit(1);
}

while(!feof(fp)){
   data = fgetc(fp)
   sendto関数を用いて送信する
}

PC2(受信端末側)
//ファイルポインタを用いて、受信ファイル名を記入しバイナリ形式で書き込む。while文は無限ループとし、PC1からのパケットを常時受け取る。

FILE *fp;

printf("受信ファイル名を入力:");
scanf("%s",&fname);
if((fp = fopen(fname,"wb")) == NULL){
fprintf(stdout,"ファイルを開く際にエラーが発生しました\n");
exit(1);
}


while(1){
   receive関数を用いて受信する。
}

上記に示す様に作ろうと思っているのですが、実際に可能なのでしょうか?

ソケットは、Windowsソケット、Linuxソケットどちらでもかまいませんので、よろしければサンプルプログラムも教えていただけないでしょうか?

よろしくお願いします。

前回、ここで質問しましたが質問内容がきちんと記述できていなかったので、もう一度質問させていただきます。

[行いたいこと(概要)]
PC1(送信端末)に保存されているファイル(jpeg,mpegファイル等)をUDPを使ってPC2(受信端末)へ送信し、PC2側でファイルを開くということです。


[現在、試していること]
インターネットや本でもエコープログラミングしかサンプルプログラムがなく、実際どのようにすればよいか分かっていない状況です。以下に、プログラム内容を示します。


PC1(送信端末側)
//ファイ...続きを読む

Aベストアンサー

きついことを言うようですが…
ネットワーク関連のプログラミング、しかもUDPなんていうキツイ仕様を使うには修行が足り無すぎるようです。
まず、1024バイトずつバッファリングしながらローカルでファイルコピーするプログラムをつくりましょう。

buf = fgetc(fp);
sendto(sock, (char*)buf, 1024, 0, (struct sockaddr *)&addr, sizeof(addr));
ファイルからデータを1024バイトづつ読む方法はわかってますか?
ファイル長が1024の倍数でない場合、残った中途半端な大きさのデータのデータ長を取得する方法がわかりますか?

while(1){
recvfrom(sock, buf,1024, 0,NULL,NULL);
}
受信したデータをファイルに書いてません。
1024バイトに満たないデータを受け取っても、何バイト受信したか確認してません。
受信側が途中でプログラムを終わっても、送信側に教えてないし。
送信側も、受信側の都合を聞かずに送りつけてるだけだし…


テクニックではなく、思慮が足りません。
通信エラーにも対応してないし。

きついことを言うようですが…
ネットワーク関連のプログラミング、しかもUDPなんていうキツイ仕様を使うには修行が足り無すぎるようです。
まず、1024バイトずつバッファリングしながらローカルでファイルコピーするプログラムをつくりましょう。

buf = fgetc(fp);
sendto(sock, (char*)buf, 1024, 0, (struct sockaddr *)&addr, sizeof(addr));
ファイルからデータを1024バイトづつ読む方法はわかってますか?
ファイル長が1024の倍数でない場合、残った中途半端な大きさのデータのデータ...続きを読む


人気Q&Aランキング