JAvaのUDPプログラミング

5317 ワード

白話:どのパソコンにも自分のipアドレスがあり、指定したipアドレスにデータを送ると、指定したパソコンにデータが送信されます.UDP通信は単なる通信方式であり、その特徴は多くない.IPアドレスデータがあれば指定されたパソコンに送れるけどね!私はデータをパソコンに送りました.パソコンの中のどのプログラムが受信しますか.親たちが知っているかどうか分かりませんが、実はすべてのネットソフトウェアには自分の通信ポートがあります.qq、クールな犬音楽のダウンロードポートなどです.わかりましたね.指定したipアドレスと指定したポートにデータを送ってこそ、指定したプログラムに送信できます(もちろん私たちが自分で作ったプログラムです).
私たちは2つのプログラムの送信側と受信側をします.まず送信側をしましょう.
JAvaはUDP通信専用のクラスDatagramSocketを提供している.このクラスにはDatagramSocket(int port) --- ( ip , ); send(DatagramPacket p), receive(DatagramPacket p)があります
では、DatagramSocket sendDatagramSocket=new DatagramSocket(10000);
      sendDatagramSocket .send(DatagramPacket p);この2つの は して、 1 は の ポートを して、 2 、データを します
どこに ればいいのか けています!! を る ! , ip , , ip , , ( ), send(DatagramPacket p) DatagramPacket p, java api DatagramPacket , DatagramPacket(byte[] buf, int length, InetAddress address, int port)ドキュメントの ---データパケットを し、 さlengthのパケットを ホスト(ipアドレス ) の ポート に するために されるパケット. のパラメータbyte[buf データ、タイプbyte[]、2 のパラメータint length、 データの さ、3 のInetAddress address ipアドレス、タイプはInetAddress、4 のポート である. String string = "yangfengwu"; byte[] by = string.getBytes(); byte[] by ={'y','a','n','g','f','e','n','g','w','u'}; , , , !! DatagramPacket sendPscket = new DatagramPacket(by, by.length,InetAddress.getByName("192.168.32.1"),8080); InetAddress.getByName("192.168.32.1")。InetAddress java , ip ,
InetAddress i = InetAddress.getLocalHost(); System.out.println(i.toString());この2つの は の とipアドレスを することができますgetByName(String host) ---- IP を って
ホスト は、マシン ( えば「java.sun.com」)であってもよいし、そのIPアドレスのテキスト であってもよい.フォント IPアドレスが されている は、アドレスフォーマットの のみがチェックされる.InetAddress ip = InetAddress.getByName("192.168.32.1"); DatagramPacket sendPscket = new DatagramPacket(by, by.length, ip ,8080);
sendDatagramSocket .send(DatagramPacket p);      sendDatagramSocket .send(sendPscket );

は な プログラムです
package server;
import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;
public class Server_test{public static void main(String[]str){try{//DatagramSocketオブジェクトを し、プログラムの ポートを10000 DatagramSocket sendDatagramSocket=new DatagramSocket(10000);// するメッセージString string="yangfengwu";// タイプbyte[]by=string.getBytes()に ;// するアドレス//InetAddress ip=InetAddressを する.getLocalHost();// のコンピュータのテストでこのように の を ることができて、 で のip を べることができます
//InetAddress ip = InetAddress.getByName("192.168.32.1");
// するポートint port=8080;// するipアドレスとポートDatagramPacket sendPscket=new DatagramPacket(by,by.length,InetAddress.getByName("192.168.32.1")、port)を む タイプのパケットを します.DatagramSocketのsendメソッドによりデータを sendDatagramSocket.send(sendPscket);// バッファbyte[]bt=new byte[1024];// タイプのパケットの //DatagramPacket(byte[] buf, int length)は、DatagramPacketの さのパケットを するためのlengthを する
DatagramPacket receivePacket = new DatagramPacket(bt, bt.length);//データsendDatagramSocketのreceiveメソッドによるデータ receive(receivePacket);// ---パケットString daString=new String(receivePacket.getData(),0,receivePacket.getLength());//getData()メソッドは、データバッファSystemを す.out.println(daString);// を じるsendDatagramSocket.close(); } catch (Exception e) {//TODO Auto-generated catch block e.printStackTrace(); } }}
は な プログラムです
 
package client;
 
import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;
 
public class Client_test{public static void main(String[]str){try{//ポートint port=8080;//DatagramSocketオブジェクトを し、プログラムの ポートを8080 DatagramSocket receiveSocket=new DatagramSocket(port);while(true){// バッファbyte[]by=new byte[1024]と する;// パケットの DatagramPacket receivePacket=new DatagramPacket(by,by.length);// データreceiveSocket.receive(receivePacket);//メッセージを してデータString string=new String(receivePacket.getData()、0,receivePacket.getLength()); System.out.println(string);//パケットによってip、およびポートを し、InetAddress ipAddress=receivePacketを することもできます.getAddress(); int receivePort = receivePacket.getPort(); System.out.println(ipAddress); System.out.println(receivePort);// データString aaString="123";byte[] bb = aaString.getBytes();// タイプのパケットを するDatagramPacket sendPscket=new DatagramPacket(bb,bb.length,InetAddress.getByName("192.168.32.1"),10000);receiveSocket.send(sendPscket); } //receiveSocket.close(); } catch (Exception e) {//TODO Auto-generated catch block e.printStackTrace(); } }}