JAvaのsocketプログラミング

3012 ワード

Socketはネットワークサービスのために提供されるメカニズムであり、ネットワーク通信の両端にSocketがあり、1つのSocketは1つのIPアドレスと1つのポート番号によって一意に決定される.データは2つのSocket間でIOを介して転送される.
1.その伝送方式は2種類あり、UDP伝送とTCP伝送:
    UDP伝送:データを送信する前に接続を確立する必要がなく、スピードが速い;信頼できないプロトコルです.各パケットのサイズは64 kbに制限されている.主にインターネットのスクリーン会議、デスクトップ共有などに応用され、データをなくしても結果に影響を与えない.
    TCP伝送:データを送信する前に接続を確立し、信頼できるプロトコルである.しかし、効率は低い.ビッグデータ転送が可能です.主にファイル転送,ダウンロードなどに応用され,データの完全性に要求が高い.
2.socket伝送プロセス:
    (1)socketサービスの確立,パケットの確立
        UDP:datagramsocketとdatagrampacket
        TCP:クライアントsocketとサービス側server socket
    (2)送信側と受信側の確立
        送信側:パケットオブジェクトに宛先を明確にするipおよびポート
        ≪受信側|Receiver|ldap≫:リスニングするポートを指定します.
    (3)呼び出しsocketの送受信方法
    (4)SOcketサービスのクローズ
 3.UDP伝送例:
class  UdpSend{
    public static void main(String[] args) throws Exception{
        //1,  udp  。  DatagramSocket  。
        DatagramSocket ds = new DatagramSocket(8888);
        //2,    ,       。
        byte[] buf = "udp ge men lai le ".getBytes();
        DatagramPacket dp = 
        new DatagramPacket(buf,buf.length,InetAddress.getByName("222.195.152.1"),5000);
        //3,  socket  ,           。  send  。
        ds.send(dp);
        //4,    。
        ds.close();
    }
}
class  UdpReceive{
	public static void main(String[] args) throws Exception
	{
		//1,  udp socket,    。
		DatagramSocket ds = new DatagramSocket(5000);
		while(true)
		{
        	    //2,     。      。
        	    byte[] buf = new byte[1024];
        	    DatagramPacket dp = new DatagramPacket(buf,buf.length);
        	    //3,     receive             。
        	    ds.receive(dp);//     。
        	    //4,               。
        	    String ip = dp.getAddress().getHostAddress();
        	    String data = new String(dp.getData(),0,dp.getLength());
        	    int port = dp.getPort();
        	    System.out.println(ip+":"+data+":"+port);
		}
		//5,    
		//ds.close();

	}
}

4.TCPワンウェイ転送例:
import java.io.*;
import java.net.*;
class  TcpClient{
    public static void main(String[] args) throws Exception {
        //      socket  。         
        Socket s = new Socket("222.195.152.1",5001);
        //      ,    socket      。
        OutputStream out = s.getOutputStream();
        out.write("test tcp communication".getBytes());
        s.close();
    }
}
class  TcpServer{
	public static void main(String[] args) throws Exception{
		//     socket  。       。
		ServerSocket ss = new ServerSocket(5001);
		//  accept              。
		while(true)
		{
    		    Socket s = ss.accept();
    		    String ip = s.getInetAddress().getHostAddress();
    		    System.out.println(ip+"has been connected");
    		//            ,                。
    		    InputStream in = s.getInputStream();
    		    byte[] buf = new byte[1024];
    		    int len = in.read(buf);
    		    System.out.println(new String(buf,0,len));
    		    s.close();//     .
		}
		//ss.close();//        
	}
}