質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

1601閲覧

VB.Netで複数クライアントの同期の改善について

RinRRR

総合スコア5

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/01/31 04:52

前提・実現したいこと

VisualStudio 2019でVB.netをつかい、
クライアントとクライアントをつなぐための仕組みを作ろうとしています。

3台をそれぞれA、B、Cと起きます。

A,B,Cの画面はすべて同じ画面で実行状態と仮定し、
フォームにはボタンがありボタンを一回押すごとに+1をするプログラムです。

AのPcでボタンを押したとき、A,B,Cすべてラグが少ない状態で同期したいのですが、
いろいろ調べたら、TCPでの接続、DBを使った接続、Jsonファイルを一定時間で読み取って反映する
の3つが引っ掛かりました。

試したこと

TCPでの接続を行ってみたのですが(接続はローカルで行っています)、AとBとの接続はできたのですが、
3台とつなぐという資料は見つからず、手詰まりな状態です。

現在DBでの同期を試している途中なのですが、なにか自分は勘違いしてるのではないかとおもっています。
(DBは同期をするものではなく、必要な時に接続し常時接続はだめ等)

なにか、改善点などがあればご教授願いたいです。
TCPでの接続は以下のサイトを参考にし作成しています。
https://dobon.net/vb/dotnet/internet/tcpclientserver.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/01/31 05:19

A,B,Cと、3台同時にボタン押したときの排他と同期、例えば1と言う値に対して同時にボタンを押したときに、2、もしくは3で終わってしまってもいいのか、それとも正しく最終的に4にならなければいけない、とか。
RinRRR

2020/01/31 06:07

2や3などで終わってしまって問題ありません。 ただ、接続方法によってラグがあるものないものあるかと思います。 ラグをできるだけすくなくして、同期を行いたいです
guest

回答1

0

ベストアンサー

どの程度の信頼性を確保したいかにもよりますが、UDPのマルチキャストを使うのはどうでしょうか?

投稿2020/01/31 05:07

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RinRRR

2020/01/31 06:09

UDPだと、仮にボタンが押されたときに、 「1カウントしたよ!」という情報を別クライアントに送信する方法ってことですか?
YAmaGNZ

2020/01/31 06:20

UDPですとTCPと違いコネクションの確立を行わずに1:多の通信が行えます。 ですので、ボタンを押された時に、ブロードキャストを用いて192.168.0.255に送信すれば、192.168.0.~のIP全てに電文を送信することが出来ます。 もしくは、239.~というマルチキャストアドレスに送信し、受けて側もこのマルチキャストアドレスのものを受信するといった使い方もできます。 ただ、UDPだと相手が確実に受信したということが分かりません。 なので、「どの程度の信頼性を確保したいかにもよりますが」と書きました。 もしUDPを採用するとしても、しっかりUDPのことを調べて、そのメリットデメリットを理解してからにしましょう。
RinRRR

2020/01/31 06:25

わかりました。 ということは、Sendしたいものを一方的に送りつけるっていう感じでとらえていいんですかね。 UDPに関する知識が、少ししかないもので・・・ UDPだと一方的(回答いただいた1:多のような通信) TCPですとお互いに情報をやり取り(1:1での接続を確立し、情報を送受信を行える) ということでしょうか。 とりあえず、個人的にTCPとUDPのメリットデメリットを調べていこうと思います
YAmaGNZ

2020/01/31 06:28

TCPを使うとすれば、1:1の通信ですので クライアントA-クライアントB クライアントA-クライアントC と2つのコネクションを確立し、それぞれのコネクションに対して「1カウントした」と送信すればいいかと思います。
RinRRR

2020/01/31 06:30

なるほど・・・ ありがとうございます。 現在の環境でTCPとUDPを試してみたいと思います。 ありがとうございました
YAmaGNZ

2020/01/31 06:38

どちらの方法をとるにしても、通信できなかった時はどうするのか、片方としか通信できない場合はどうするのか等、異常時の処理をいろいろ考える必要がありますので頑張ってください。
RinRRR

2020/01/31 06:49

また何かありましたらお聞きすることがあるかと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問