関連するJavaクラスの紹介
datagramsocket
public class DatagramSocket extends Object
このクラスは、データグラムパケットの送信と受信に使用されるソケットを表します。
データグラムソケットは、パケット配信サービスの送信または受信ポイントです。データグラムソケットで送信または受信された各パケットは、個別にアドレス指定され、ルーティングされます。あるマシンから別のマシンに送信される複数のパケットは、異なるルートを選択するか、異なる注文で到着する場合があります。
UDPブロードキャスト送信は、常にdatagramsocketで有効になります。ブロードキャストパケットを受信するには、DatagramSocketをワイルドカードアドレスにバインドする必要があります。いくつかの実装では、より具体的なアドレスにバインドすると、ブロードキャストパケットを受信することもできます。
データは、DatagramSocketの送信および受信を通じて送信および受信できます。
public void receive(DatagramPacket p) throws IOException
このソケットからデータグラムパケットを受信します。この方法が戻ると、DataGrampacketのバッファには受信したデータが充填されます。 Datagramパケットには、送信者のIPアドレスと送信者のマシンのポート番号も含まれています。
このメソッドは、データグラムが受信されるまでブロックされます。 Datagramパケットオブジェクトの長さフィールドには、受信した情報の長さが含まれています。情報がパケットの長さよりも長い場合、情報は短くなります
セキュリティマネージャーが存在し、セキュリティマネージャーのCheCkCeptメソッドが受信操作を許可しない場合、パケットを受信できません。
パラメーター:
p-着信データを配置するDataGrampacket。
投げる:
IOException -I/Oエラーが発生した場合。
sockettimeoutexception -setsotimeoutが以前に呼び出され、タイムアウト値が期限切れになった場合。
PortunReachableException-ソケットが現在到達不可能なターゲットに接続されているときにスローする場合があります。例外がスローされるという保証はないことに注意してください。
IllegalBlockingModeException -このソケットには関連するチャネルがあり、チャネルが非ブロッキングモードにある場合。
public void send(DatagramPacket p) throws IOException
このソケットからデータグラムパケットを送信します。 datagrampacketには、送信されるデータ、その長さ、リモートホストのIPアドレス、リモートホストのポート番号を示す情報が含まれています。
セキュリティマネージャーが存在し、ソケットが現在リモートアドレスに接続されていない場合、このメソッドは最初にいくつかのセキュリティチェックを実行します。まず、p.getAddress()。isMulticaStAddress()がTrueの場合、このメソッドはP.GetAddress()をパラメーターとしてSecurity ManagerのCheckMulticastメソッドを呼び出します。式の値が偽の場合、このメソッドは、P.GetAddress()。GethostAddress()およびP.GetPort()をパラメーターとして、Security ManagerのCheckConnectメソッドを呼び出すために使用されます。操作が許可されていない場合、セキュリティマネージャーメソッドへの各呼び出しにより、セキュリティエクセプトが表示されます。
パラメーター:
送信されるp-datagrampacket。
投げる:
IOException -I/Oエラーが発生した場合。
SecurityException -Security Managerが存在し、そのCheckMulticastまたはCheckConnectメソッドが送信を許可しない場合。
PortunReachableException-ソケットが現在到達不可能なターゲットに接続されているときにスローする場合があります。例外がスローされるという保証はないことに注意してください。
IllegalBlockingModeException -このソケットには関連するチャネルがあり、チャネルが非ブロッキングモードにある場合。
datagrampacket
public final class DatagramPacket extends Object
このタイプは、ConnectionLess Packet Deliveryサービスの実装に使用されるUDPデータグラムパケットを表します
建設方法:
DatagramPacket(byte[]buf,intlength)
DataGrampacketを構築して、長さのデータパケットを受信します
DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)
データグラムパケットを構築して、指定されたホストの指定されたポート番号に長さのパケットを送信する
UDPグループチャットシステムの例
UDPは接続せずに接続されています。グループチャットは、全員がメッセージを受信するように、放送アドレス(ブロードキャストアドレス)にデータを送信することです。スレッドメソッドを使用して、送信者スレッドとレシーバースレッドを起動し、送信者はキーボード入力を出力として読み取り、受信機は入力情報を読み取り、表示します。
送信者
udpsender.java
パッケージcn.xidian.socket; import java.io.bufferedReader; Import java.io.io.ioexception; Import java.io.inputStreamReader; Import java.net.datagrampacket; Import java.net.datagramssocket; {// udpサービスdatagramssocket socket = new datagramsocket(); //データパケットを準備する//システム入力bufferedreader in = new inputstreamreader(system.in)); string line = null;グループチャットは、たとえば192.168.137.255Datagrampacket data = new Datagrampacket(line.getBytes()、line.getBytes()。長さ、inetAddress.getByname( "127.0.0.1")、9090); // socketsocket.close();} catch(ioexception e){e.printstacktrace();}}}}}}受信機
udpreceiver.java
パッケージcn.xidian.socket; import java.io.ioexception; import java.net.datagrampacket; import java.net.datagramsocket; public class udpreceiver拡張スレッド{@override public void run(){try {// udpサービスを作成し、ポートデータをリッスンします。 byte [] temp = new byte [1024]; datagrampacket data = new datagrampacket(temp、temp.length); boolean flag = true; while(flag){socket.receive(data); //送信者の関連情報文字列senderaddress = data.getaddress()。 data.getAddress()。gethostname(); system.out.println(senderhostname+"("+senderaddress+")"+""+new String(temp、0、data.getlengt());} //リソースソケットclose();主な方法
udpmain.java
パッケージcn.xidian.socket; public class udpmain {public static void main(string [] args){// udpreceiverスレッドudpreceiver receiver = new udpreceiver(); receiver.start(); // udpsenderスレッドudpsenderdender = new udpsender(テスト結果
入力パーティはキーボード入力を出力として読み取り、受信者はメッセージを受信し、送信者のIPとホスト名を表示します。
要約します
上記は、UDPを使用してグループチャットシステムコードの例を構築するJavaプログラミングに関するこの記事のすべての内容です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!