ページ 1 / 1
winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 15:45
by わからんこ
3Dモデルを作ったプログラムを作っています。
サーバー側はポート番号入力後、bindして
WSAAsyncSelectでウィンドウにメッセージを送り、WSAGETSELECTEVENTマクロで
受信があったこと知らせます。受信したメッセージは接続しているクライアント(送信者は除く)全員に送信します。
クライアント側は移動があった時のみサーバーに移動後の座標を送信します。
こんな感じのプログラムをつくりました。
サーバーに接続して位置情報の送信と受信はうまく行ってるみたいなんですが、クライアントが同時に移動してしまうと
クライアントプログラムで勝手に移動が行われて触れなくなってしまいます。
通信のやりとりの仕方はこれであっているのでしょうか?
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 19:16
by h2so5
わからんこ さんが書きました:
サーバーに接続して位置情報の送信と受信はうまく行ってるみたいなんですが、クライアントが同時に移動してしまうと
クライアントプログラムで勝手に移動が行われて触れなくなってしまいます。
意味がわかりません。
通信の方法以前に、いったい何をするためのプログラムなのか説明してください。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 19:38
by わからんこ
アメーバーみたいにアバターを動かせてチャット出来る感じを目指しています。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 21:51
by softya(ソフト屋)
申し訳ないですが、マルチポストでは無いでしょうか?
「winsockを使った通信方法 - C・C++ - 教えて!goo」
http://oshiete.goo.ne.jp/qa/8248644.html
フォーラムルール違反になるので、相互リンクをお願いします。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 22:06
by わからんこ
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 22:09
by softya(ソフト屋)
このままだと単方向リンクです
相互リンクにするために、教えてgooからも補足などでこちらをリンクしてください。
つまり、コチラとアチラの回答者が相互に行き来きできる様にしてください。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 22:12
by わからんこ
質問に補足できると思い手間取り遅れてしましまい。
すいません。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 22:40
by softya(ソフト屋)
同じような質問が他にもある様ですが、全部に相互リンクをお願いできますか。
面倒でしょうが、回答者側が無駄な回答をしないために必要な事なのでお願いします。
「C言語何でも質問掲示板~規約~」
http://dixq.net/board/board.html
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 22:56
by わからんこ
http://oshiete.goo.ne.jp/qa/8249115.html
すいません。こっちの質問は直接関係ないかなと思ってました。
リンク貼ってきました。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月04日(水) 23:53
by softya(ソフト屋)
通信に関しては、もう結論は出ているみたいですがlistenするサーバーらしいプログラムを組む必要がありますね。
あと、クライアント・サーバ間でのデータのやり取りがよく分かりません。
あちらでも質問されてますが、こちらとあちらで詳しく説明してください。
※ これがマルチポストの面倒な所です。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月05日(木) 00:18
by わからんこ
listen関数を使わずに
WSAAsyncSelectを使って
指定したソケットにFD_READを指定して受信があった時に、ウィンドウプロシージャでそのメッセージを受け受信する
やり方は間違ってるってことですか?
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月05日(木) 00:21
by わからんこ
クライアントとサーバー間では、名前と座標をくっつけてやりとりしています。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月05日(木) 00:55
by softya(ソフト屋)
すいません。回答は明日になると思いますが、「クライアントとサーバー間では、名前と座標をくっつけてやりとりしています。」の部分に問題が有るので「サーバーに接続して位置情報の送信と受信はうまく行ってるみたいなんですが、クライアントが同時に移動してしまうとクライアントプログラムで勝手に移動が行われて触れなくなってしまいます。」と言う現象に繋がっていると思います。
これは、listenを使わずに組んでいるので、何らかの手違いで受信した相手と送信する相手を間違っている可能性もあります。
どちらにしても、ここの詳しい説明なしに原因は掴めないと思いますので、ソースコードを提示すべだと思います。
出来れば、バグを再現するだけのシンプルなコードが望ましです。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月05日(木) 01:15
by わからんこ
わかりました。なんとかシンプルにしてみます。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月05日(木) 01:18
by わからんこ
UDPを使っています
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月15日(日) 23:34
by わからんこ
シンプルにクライアント側のプログラムを書きなおしている時に、
recv関数がブロッキングを起こしている事がわかりました。
そこで、マルチスレッドを使ってブロッキングを回避する方法でうまくいきました。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月16日(月) 00:06
by Poco
まだ見ていることを祈りつつ。
UDPの時は、recv()じゃなくて、recvfrom()を使いましょう。
Re: winsockを使った通信がうまくいきません
Posted: 2013年9月16日(月) 09:21
by わからんこ
ありがとうございます。
参考にさせてもらったサイトがrecv関数を使っていたのでrecvと書いてしましましたが
recvfrom関数を使っています。