[免責事項:転載は歓迎ですが、商業目的での使用はご遠慮ください。連絡先メールアドレス: [email protected]]
前に説明したように、デバイスが相互に通信する方法は数多くあります。ただし、上記の通信方法では、ホスト コンピュータと制御対象デバイスが非常に近い必要があることに気づいたかどうかはわかりませんが、両者の距離が比較的近い場合は、この時点で別の方法を考える必要があります。 。ネットワークは、この問題の解決に役立つ効果的なツールの 1 つです。
232と比べて、有線でも無線でも伝送距離が長いのが最大のメリットです。それだけではなく、内部ネットワークと外部ネットワークにも分けることができ、内部ネットワーク機器であれば一般に機密性やセキュリティが要求され、外部ネットワークであれば機器の制御が実現できることを意味します。 、本番環境、オペレーティングシステム制御、これらは非常に便利です。
もちろん、ネットワークをうまく使用するには、リンク層とは何か、MAC アドレスとは何か、IP とは何か、ポートとは何か、TCP/IP の基本プロトコルをマスターできる必要があります。ゲートウェイなどこれらの基本的な内容に加えて、HTTP、FTP、Telnet、SSH、SMTP などの一般的なプロトコルについても理解する必要があります。これらの基盤を基盤として、特定のデバイス プロトコルを後から追加することで、リモート デバイスへのリアルタイム アクセスを実現できます。
TCP/IP は単なる標準です。プログラミング言語、ソフトウェア プラットフォーム、および関連デバイスとは何の関係もありません。この標準を満たしている限り、スイッチやルーターを使用してデータの相互運用性を実現できます。
1. ユーザーが習得する必要があるプロトコル
今のところ単なるアプリケーションであれば、IPとPORTの設定を覚えるだけでよく、よく使われるHTTP、FTP、Telnetなどのプロトコルもマスターしておくと良いでしょう。
2. TCP と UDP のどちらを選択するか
TCP は通常、ネットワーク環境が比較的良好なシナリオで使用されますが、ワイヤレスまたはネットワークの状態が劣悪なシナリオでは、通常は大きな問題にならない UDP を使用するのが最善です。
3. 契約書を自分で設計したくない場合はどうすればよいですか?
通信機器を自社で開発した場合は、xmlrpc を使用して通信することができます。つまり、すべての通信データは XML 形式に圧縮されて送信され、送信後に対応するコールバック関数が呼び出されます。
4. サードパーティ製機器の契約
サードパーティ製デバイスの場合は、通常、対応する SDK プロトコル コンテンツが公式 Web サイトまたは github で提供されているため、対応するコードを入手し、オペレーティング プラットフォーム上でコンパイルして開発するだけで済みます。コンテンツのこの部分を自分で開発しないことをお勧めします。なぜなら、率直に言って、この部分の作業はサプライヤーが完了すべきであり、また、サプライヤーがコンテンツのこの部分の開発を完了するのを手伝ったとしても、自分自身にとっては、その時間は費用対効果の高い取引ではありません。
5. 開発手法
現在、Windows であろうと Linux であろうと、c#、c、c++、vb、golang、java などの言語であっても、あらゆるプラットフォーム、あらゆる言語でネットワーク プログラムを単独で開発できます。 , 次に、Raw APIを使用してネットワークプログラムを自分で直接開発することも可能です。 C# wpf に関しては、Raw API を直接使用してネットワークプログラムを開発することも可能です。
6. ネットワークインターフェースの開発
ネットワーク開発の効果を検証するには、インターフェイスを作成し、同じネットワーク セグメント上またはネットワーク セグメント間で通信が実際に可能かどうかを検証するいくつかのプログラムを作成します。このとき、まずは自分のコンピュータでテストして127.0.0.1で対応し、問題がなければ別のデバイスにデプロイして確認や検証を行い、自分なりのデバッグ方法や開発経験を少しずつ蓄積していきます。
特定の IP と特定のポートにバインドするサーバー プログラム インターフェイスを作成すると、ボタンをクリックすると、ポートでのリッスンを開始できます。このとき、顧客が来店するたびに、右側のコンボボックスに選択肢が追加されます。 2行目のテキストボックスにもお客様から送信された内容が印刷されますので、メッセージを送信する必要がある場合は3行目に内容を入力し、「メッセージ送信」ボタンをクリックしてください。もちろん、少し複雑ですが、ファイルを送信する場合は、ファイルを選択してファイル送信ボタンを押すことでもこの操作を完了できます。
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp"
mc:Ignorable="d"
Title="ServerDemo" Height="350" Width="542">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="4*"/>
<RowDefinition Height="4*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.5*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" BorderBrush="Black" Margin="5" Text="{Binding Ip}" HorizontalContentAlignment="Left"/>
<Border Margin="5" Grid.Column="1" Grid.Row="0" CornerRadius="10" Background="CadetBlue">
<TextBox BorderBrush="Black" Text="{Binding Port,Mode=TwoWay}" HorizontalContentAlignment="Left"/>
</Border>
<Border Margin="5" Grid.Column="2" Grid.Row="0" CornerRadius="10" Background="CadetBlue">
<Button BorderBrush="Black" Content="开始监听" Command="{Binding StartListen}"/>
</Border>
<Border Margin="5" Grid.Column="3" Grid.Row="0" CornerRadius="10" Background="CadetBlue">
<Button BorderBrush="Black" Content="停止监听" Command="{Binding StopListen}"/>
</Border>
<Border Margin="5" Grid.Column="4" Grid.Row="0" CornerRadius="10">
<StackPanel Orientation="Horizontal">
<TextBlock Text="连接的客户:" VerticalAlignment="Center" TextAlignment="Center"/>
<ComboBox Width="80" ItemsSource="{Binding DicSocket,Mode=TwoWay}" SelectedValuePath="ItemSocket" DisplayMemberPath="ip"
SelectedValue="{Binding SelectSocket,Mode=TwoWay}" />
</StackPanel>
</Border>
<TextBox Grid.Row="1" Grid.ColumnSpan="5" Background="LightSlateGray"
BorderBrush="Black" Margin="5" Text="{Binding LogReceive}" VerticalScrollBarVisibility="Visible"/>
<TextBox Grid.Row="2" Grid.ColumnSpan="5" Background="LightSlateGray"
BorderBrush="Black" Margin="5" Text="{Binding Sendtext}" VerticalScrollBarVisibility="Visible"/>
<Border Margin="5" Grid.ColumnSpan="2" Grid.Row="3" CornerRadius="10" Background="CadetBlue">
<TextBox BorderBrush="Black" Text="{Binding SelectFile,Mode=TwoWay}"/>
</Border>
<Border Grid.Column="2" Grid.ColumnSpan="4" Grid.Row="3" CornerRadius="5" Background="White">
<StackPanel Orientation="Horizontal" >
<Grid Width="323">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Content="选择文件" Margin="5" Grid.Column="0" Command="{Binding SelectCommand}"/>
<Button Content="发送文件" Margin="5" Grid.Column="1" Command="{Binding SendFileCommand}"/>
<Button Content="发送消息" Margin="5" Grid.Column="2" Command="{Binding SendMessageCommand}"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Window>
7. 残りの作業
サーバー側のプログラムだけでは、このソフトウェアはスムーズに動作しません。サーバー側インターフェースの書き方を参考にして、クライアント側インターフェースとプログラムを記述することで、クライアントとサーバー間のデータ通信を実現できます。