Java之路--Javase篇 网络编程

android培训、 java培训、期待与您交流!
                               (黑马程序员)UDP\TCP传输的实现
 
UDP传输服务---DatagramSocket类
DatagramSocket即可接又可发。
 
发送Code:
 /*
  需求:通过UDP传输方式,将一段文字数据发送出去
  思路:1、建立UDPsocket服务;
        2、提供数据,并将数据封装到数据包中;
        3、通过Socket服务的发送功能,将数据包发送出去;
        4、关闭资源。
  */
  class UdpSend
  {
    public static void main(String[] args) throws Exception
    {
     //1,创建upd服务,通过DatagramSocket,可以指定发送数据的端口号,否则系统实时自       动分配
     DatagramSocket ds = new DatagramSocket(8888);
     
    //2,确定数据,并将其封装成数据包。
     byte[] buf = "upd ge men lai le".getBytes();
     
    //3.通过Socket服务将已有数据包发送出去,通过send方法。
     DatagramSocket dp =
     new Datagrampacket(buf,buf.length,InerAddress.getByName("192.168.1.254"),10000)
     
    ds.send(dp); 
      //4.关闭资源
    ds.close();
     
     }
   }
接收Code:
  import java.net.*;
  /*
  需求:接收udp协议传来的字节数据并处理。
  思路:1、定义udpsocket服务,通常会监听一个端口。其实就是给这个接收的网络应用程序定义一个数字标识方便于明确哪些数据过来该应用程序可以处理;
        2、定义一个空的数据包存储传来的数据,这样做得原因在于,数据包对象中有相应的功能提取字节数据的不同数据信息;
        3、通过Socket服务的receive方法,将收到的数据存入已经定义好得数据包中。
        4、通过数据包对象的相应功能,将数据还原打印于控制台上;
        5、关闭资源。
  */
  class UdpRece
  {
    public static void main(String[] args) throws Exception
    {
     //1、创建upd的socket服务,建立端点,并明确监听的端口
     DatagramSocket ds = new DatagramSocket(10000);//不可以放在while循环中否则出现端     口绑定异常
     while(ture)//跟阻塞式方法配合,不会死循环
       {
         //2、定义数据包,用于存储数据。
         byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf,buf,length);
     
        //3.通过Socket服务的recive方法将接收到数据存入数据包中。
        ds.recive(dp); //阻塞式方法
        
        //4.通过数据包得方法获取其中的数据
        String ip = dp.getAddress().getHostAddress();
        String data = new String(dp.getDta(),0,dp.getLength());
        int port = dp.getPort();
        System.out.println(ip+data+port);
         }
     //5.关闭资源
     ds.close();
     
     }
   }
上面类似于聊天程序但是是在两个窗口中进行的,如果放入一个窗口中可以使用多线程技术并封装到一个程序中即可。
TCP传输
TCP分客户端(Socket)和服务端(ServerSocket)
客户端Socket
该对象建立时,就可以去连接指定主机,原因在于tcp是面向连接的,所有必须有服务端存在并连接成功,形成通路后,通过该通道进行数据传输。
   import java.io.*;       
   import java.net.*;
   class TcpClient
   {
       public static void main(String[] args)
         {
           //创建客户端的socket服务。指定目的主机和端口
          Socket s = new Socket("192.168.1.254,10003");
          //为了发送数据,应该获取socket流中的输出流。
          OutputStream out = s.getOutputStream();
          out.write(tcp ge men lai le?".getBytes());
          s.close();
         }
    }
服务端ServerSocket
步骤:
1.建立服务端的socket服务,ServerSocket(),并侦听一个端口;
2.通过ServerSocket的accept方法,获取连接过来的客户端对象,没有连接就会等待并监听,所以这个方法是阻塞式的。
3.如果客户端发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据,并打印在控制台。
4.关闭服务端。(可选)
  Code:
   import java.io.*;       
   import java.net.*;
   class TcpServer
   {
       public static void main(String[] args)
         {
           //创建服务端的socket服务。并监听一个端口
          ServerSocket ss = new ServerSocket(10003);
           //为了accept方法获取连接过来的客户端对象。
           Socket s = ss.getInputStream();
           String ip = s.getInetAddress().getHostAddress();
          //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。
          InputStream in = s.getInputStream();
          byte[] buf = new byte[1024];
          lin len = in.read(buf);
          System.out.println(new String(bug,0,len));
          s.close();//关闭客户端连接
          ss.close();//可选操作
          
         }
    }
TCP中务必先启动服务端,才能连接上
---------------------- android培训、 java培训、期待与您交流! ---------------------- 详细请查看: http://edu.csdn.net/heima

你可能感兴趣的:(java,职场,网络编程,休闲)