JAva基礎十一---Socket

7606 ワード

一、UDP:無接続通信.
特徴:1.伝送効率が高い
           2.セキュリティが低く、データ転送が保証されません.
開発プロセス:
 
送信側(クライアント):1.udpサービスDatagramSocket ds=new DatagramSocket()2を確立する.パッケージ(DatagramPacket)byte[]buff="udp test".getBytes();    DatagramPacket dp=new DatagramPacket (buf,buf.length,InetAddress.getByName("192.168.1.22"),10000); 3.送信データ:ds.send(dp); 4.リソースclose dsを閉じる.close()
受信側(サービス側):1.udpサービスDatagramSocket ds=new DatagramSocket(10000)2を定義する.パケット受信データbyte[]buff=new byte[1024]を定義する.   DatagramPacket dp=new DatagramPacket (buf,buf.length); 3.udpサービスで受信パケットreceive ds.receive(dp); 4.データstring ip=dpを取り出す.getAddress().getHostAddress();    int len=dp.getLength();    String data=new String(dp.getData(),len); 5.リソースclose dsを閉じる.close();
サービス:
public class UdpServer extends  Thread {
    Handler handler;
    public UdpServer(Handler handler){
        this.handler=handler;
    }
    public void run(){
        recive(handler);
    }
    String TAG="UdpTest_Server";
    public void recive(Handler handler){
        DatagramSocket ds=null;
        try {
            //1.   udp  ,        10000   
             ds=new DatagramSocket(1000_0);
            //2.          
            byte[] buff=new byte[1024] ;
            DatagramPacket dp=new DatagramPacket (buff,buff.length);
            Message msg=handler.obtainMessage(1);
            msg.obj="            !";
            handler.sendMessage(msg);
            while (true) {
                //3.  udp      ,receive    ,        
                ds.receive(dp);
                //4.    
                String ip = dp.getAddress().getHostAddress();
                int len = dp.getLength();
                String data = new String(dp.getData(), 0, len);
                //--------- ui  -------------
                msg = handler.obtainMessage(1);
                msg.obj = "  :" + ip + "   :" + data;
                handler.sendMessage(msg);
            }
            //------------------------------
        } catch (SocketException e) {
            Message msg=handler.obtainMessage(1);
            msg.obj="SocketException  :"+e.toString();
            handler.sendMessage(msg);
        } catch (IOException e) {
            Message msg=handler.obtainMessage(1);
            msg.obj="IOException  :"+e.toString();
            handler.sendMessage(msg);
        }finally {
            //5.    close
            if(ds!=null)
                ds.close();
        }

    }
}

クライアントコード:
public class UdpClient extends  Thread{
    String TAG="UdpTest_Client";
    Handler handler;
    public UdpClient(Handler handler){
        this.handler=handler;
    }
    public void run(){
        sendData(handler);
    }
    public void sendData(Handler handler){
        //1.  udp  
        DatagramSocket  ds= null;
        Message message=handler.obtainMessage();
        try {

            ds = new DatagramSocket();
            //2.     
            byte[] buff="udp client test" .getBytes();
            InetAddress ip=InetAddress.getByName("192.168.43.1");//   IP
            int port=10000;//      
            DatagramPacket dp = new DatagramPacket(buff,buff.length, ip,port);
            //3.    
            ds.send(dp);
            message.obj="udp       !";
            handler.sendMessage(message);
            //    
        } catch (SocketException e) {
             //Socket    , Socket            
            message.obj="SocketException   ="+e.toString();
            handler.sendMessage(message);
        }catch (UnknownHostException e) {
            //IP        
            message.obj="UnknownHostException   ="+e.toString();
            handler.sendMessage(message);
        } catch (IOException e) {
            //   I / O  。    
            message.obj="IOException   ="+e.toString();
            handler.sendMessage(message);
        }finally {
            if (ds != null) {
                //message.obj="    ";
              //  handler.sendMessage(message);
                ds.close();
            }
        }

    }
}

 
二、TCP:接続向けの通信.
特徴:1.伝送効率が低い
           2.安全性が高い
開発プロセス:
クライアント:1.Socketサービスを作成し、ipとポートSocket socket=new Socket(「192.168.1.12」、10001)を指定します.2.データを送信、socket出力ストリームOutputStream out=socketを取得する.getOutputStream();   out.write(「tcpテスト」.getBytes();3.socket s.close()を閉じます.
サービス側:1.サービス側のsocketサービスを確立し、ポートServerSocket ss=new ServerSocket(10001)を傍受する.2.acceptメソッドにより接続するクライアントオブジェクトSocket s=ssを取得する.accept();//ブロック3.クライアントからのデータ取得InputStreamin=s.getInputStream()  byte[] buf=new byte[1024];   int len=in.read(buf);//readはString data=new String(buff,0,len)をブロックします.4.リソースのクローズ
サービス側コード:
public class TcpServer extends Thread {
    Handler handler=null;
    public TcpServer(Handler handler){
        this.handler=handler;
    }
    public void run(){
        recive(handler);
    }

    public void recive(Handler handler){
        ServerSocket  ss=null;
        try {
            //1.      socket  ,    10000
              ss=new ServerSocket(1000_1);
            while (true){
                showMsg("TCP      !");
                // 2.  accept              
                Socket s=ss.accept();//   
                showMsg("     :"+s.getInetAddress().getHostAddress());
                //3.           
                InputStream in=s.getInputStream();
                byte[] buff=getData(in);
                if(buff!=null) {
                    String data = new String(buff, 0, buff.length);
                    showMsg("    :"+s.getInetAddress().getHostAddress()+",   :"+data);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(ss!=null){
                try {
                    //4.    
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    private byte[] getData(InputStream in){
        byte[] temp=new byte[1024];
        try {
            int len= in.read(temp);
            return  Arrays.copyOf(temp,len);
        } catch (IOException e) {
            showMsg("        :"+e.toString());
        }
        return null;
    }
    private void showMsg(String  strMsg){
        Message msg = handler.obtainMessage();
        msg.obj = strMsg;
        handler.sendMessage(msg);
    }
}

クライアントコード:
public class TcpClient extends Thread{
    Handler handle=null;
    public TcpClient(Handler handler){
        this.handle=handler;
    }
    public void run(){
        send();
    }
    public void send(){
        //1.  Socket  ,  ip   
        Socket socket= null;
        try {
            socket = new Socket("192.168.43.1",1000_1);
            //2.    ,  socket   
            OutputStream out=socket.getOutputStream();
            out.write("tcp     ".getBytes());
            showMsg("         !");
        } catch (IOException e) {
            showMsg("         :"+ e.toString());
            e.printStackTrace();
        }finally {
            //3.  socket
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public void showMsg(String  data){
        Message msg=handle.obtainMessage(1);
        msg.obj=data;
        handle.sendMessage(msg);
    }
}