winsockを使った通信がうまくいきません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
わからんこ

winsockを使った通信がうまくいきません

#1

投稿記事 by わからんこ » 10年前

3Dモデルを作ったプログラムを作っています。

サーバー側はポート番号入力後、bindして
WSAAsyncSelectでウィンドウにメッセージを送り、WSAGETSELECTEVENTマクロで
受信があったこと知らせます。受信したメッセージは接続しているクライアント(送信者は除く)全員に送信します。

クライアント側は移動があった時のみサーバーに移動後の座標を送信します。

こんな感じのプログラムをつくりました。

サーバーに接続して位置情報の送信と受信はうまく行ってるみたいなんですが、クライアントが同時に移動してしまうと
クライアントプログラムで勝手に移動が行われて触れなくなってしまいます。

通信のやりとりの仕方はこれであっているのでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: winsockを使った通信がうまくいきません

#2

投稿記事 by h2so5 » 10年前

わからんこ さんが書きました: サーバーに接続して位置情報の送信と受信はうまく行ってるみたいなんですが、クライアントが同時に移動してしまうと
クライアントプログラムで勝手に移動が行われて触れなくなってしまいます。
意味がわかりません。
通信の方法以前に、いったい何をするためのプログラムなのか説明してください。

わからんこ

Re: winsockを使った通信がうまくいきません

#3

投稿記事 by わからんこ » 10年前

アメーバーみたいにアバターを動かせてチャット出来る感じを目指しています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: winsockを使った通信がうまくいきません

#4

投稿記事 by softya(ソフト屋) » 10年前

申し訳ないですが、マルチポストでは無いでしょうか?
「winsockを使った通信方法 - C・C++ - 教えて!goo」
http://oshiete.goo.ne.jp/qa/8248644.html
フォーラムルール違反になるので、相互リンクをお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わからんこ

Re: winsockを使った通信がうまくいきません

#5

投稿記事 by わからんこ » 10年前

http://oshiete.goo.ne.jp/qa/8248644.html

gooの質問掲示板で同じ質問をしています。
すいません。忘れていました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: winsockを使った通信がうまくいきません

#6

投稿記事 by softya(ソフト屋) » 10年前

このままだと単方向リンクです
相互リンクにするために、教えてgooからも補足などでこちらをリンクしてください。

つまり、コチラとアチラの回答者が相互に行き来きできる様にしてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わからんこ

Re: winsockを使った通信がうまくいきません

#7

投稿記事 by わからんこ » 10年前

質問に補足できると思い手間取り遅れてしましまい。
すいません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: winsockを使った通信がうまくいきません

#8

投稿記事 by softya(ソフト屋) » 10年前

同じような質問が他にもある様ですが、全部に相互リンクをお願いできますか。
面倒でしょうが、回答者側が無駄な回答をしないために必要な事なのでお願いします。

「C言語何でも質問掲示板~規約~」
http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わからんこ

Re: winsockを使った通信がうまくいきません

#9

投稿記事 by わからんこ » 10年前

http://oshiete.goo.ne.jp/qa/8249115.html
すいません。こっちの質問は直接関係ないかなと思ってました。
リンク貼ってきました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: winsockを使った通信がうまくいきません

#10

投稿記事 by softya(ソフト屋) » 10年前

通信に関しては、もう結論は出ているみたいですがlistenするサーバーらしいプログラムを組む必要がありますね。
あと、クライアント・サーバ間でのデータのやり取りがよく分かりません。
あちらでも質問されてますが、こちらとあちらで詳しく説明してください。
※ これがマルチポストの面倒な所です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わからんこ

Re: winsockを使った通信がうまくいきません

#11

投稿記事 by わからんこ » 10年前

listen関数を使わずに

WSAAsyncSelectを使って
指定したソケットにFD_READを指定して受信があった時に、ウィンドウプロシージャでそのメッセージを受け受信する
やり方は間違ってるってことですか?

わからんこ

Re: winsockを使った通信がうまくいきません

#12

投稿記事 by わからんこ » 10年前

クライアントとサーバー間では、名前と座標をくっつけてやりとりしています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: winsockを使った通信がうまくいきません

#13

投稿記事 by softya(ソフト屋) » 10年前

すいません。回答は明日になると思いますが、「クライアントとサーバー間では、名前と座標をくっつけてやりとりしています。」の部分に問題が有るので「サーバーに接続して位置情報の送信と受信はうまく行ってるみたいなんですが、クライアントが同時に移動してしまうとクライアントプログラムで勝手に移動が行われて触れなくなってしまいます。」と言う現象に繋がっていると思います。

これは、listenを使わずに組んでいるので、何らかの手違いで受信した相手と送信する相手を間違っている可能性もあります。
どちらにしても、ここの詳しい説明なしに原因は掴めないと思いますので、ソースコードを提示すべだと思います。
出来れば、バグを再現するだけのシンプルなコードが望ましです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わからんこ

Re: winsockを使った通信がうまくいきません

#14

投稿記事 by わからんこ » 10年前

わかりました。なんとかシンプルにしてみます。

わからんこ

Re: winsockを使った通信がうまくいきません

#15

投稿記事 by わからんこ » 10年前

UDPを使っています

わからんこ

Re: winsockを使った通信がうまくいきません

#16

投稿記事 by わからんこ » 10年前

シンプルにクライアント側のプログラムを書きなおしている時に、
recv関数がブロッキングを起こしている事がわかりました。

そこで、マルチスレッドを使ってブロッキングを回避する方法でうまくいきました。

Poco
記事: 161
登録日時: 13年前

Re: winsockを使った通信がうまくいきません

#17

投稿記事 by Poco » 10年前

まだ見ていることを祈りつつ。
UDPの時は、recv()じゃなくて、recvfrom()を使いましょう。

わからんこ

Re: winsockを使った通信がうまくいきません

#18

投稿記事 by わからんこ » 10年前

ありがとうございます。
参考にさせてもらったサイトがrecv関数を使っていたのでrecvと書いてしましましたが
recvfrom関数を使っています。

閉鎖

“C言語何でも質問掲示板” へ戻る