网络编程

1,IP地址

2,端口

3,协议

  UDP&TCP

  1,创建UDP传输的发送端

    思路:1,建立udp的socket服务;2,将要发送的数据封装到数据包,使用DatagramPacket对象将数据封装到改对象啊中;3,通过udp的socket服务将数据包发送出去;4,关闭socket服务。

    1,建立udp的socket服务

    DatagramSocket ds = new DatagramSocket();

    2,将要发送的数据封装到数据包中

    /*String str = "udp传输演示,”;

      // 使用DatagramPacket对象将数据封装到对象包中

      byte[] buf = str.getBytes();*/

    BufferReader bufr = new bufferedReader(new InputStreamReader(System.in));

    String line = null;

    while((line=buffr.readLine())!=null){

    byte[] buf = line.getBytes();

    DatagramPacket dp = 

              new   DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);

    ds.sed(sp);

    if("886".eauals(line))

      break;

    }

    /*DatagramPacket dp = 

          new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);

          new DatagramPacket(数据数组,数据大小,iP对象,端口号);

    3,通过udp的socket服务将数据包发送出去;

    ds.send(dp);*/

    4,关闭socket服务

    ds.close();

   2,创建UDP传输的接收端

  1,建立udp socket服务;2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析接收到的数据;3,使用socket服务的receive方法将接受到的数据存储到数据包中。4,通过数据包的方法解析数据包中的服务;5,关闭资源。

  1,建立udp socket服务

  DatagramSocket ds = new DatagramSocket(10000);

  2,创建数据包

  byte[] buf = new byte[1024];

  Datagrampacket dp = new DatagramPacket(buf,buf.length);

  3,使用socket服务的receive方法将接收到的数据存储到数据包中

  ds.receive(dp);

  4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。

  String ip = dp.gerAddress().getHostAddress();

  int port = dp.getPort();

  String  text = new String(dp.getData(),0,dp.getlength());

  5,关闭资源

  ds.close();

  

    

  TCP

  1,客户端发数据到服务端

  Tcp传输,客户端建立的过程。

    1,创建tcp客户端socket服务,使用的是socket对象。

      建议该对象一创建就明确目的地。要连接的主机。

    2,如果连接建立成功,说明数据传输通道已建立

      该通道就是socket流,是底层建立好的。既然是流,说明这里既有输入,又有输出。

      想要输入或者输出流对象,可以找socket来获取。

      可以通过getOutputStream()和getInputStream()来获取两个字节流。

    3,使用输出流,将数据写出。

    4,关闭资源。

    1,创建客户端服务

    Socket socket = new Socket("192.168.1.100",10002);

    2,获取socket流中的输出流

    OutputStream out = socket.getOutputStream();

      使用输出流将指定的数据写出

     out.write("tcp演示:哥们来了!”);

    2.1,读取服务端返回的数据,使用socket读取流。

      InputStream in = socket.getInputStream();

      byte[] buf = new byte[1024];

      int len = in.read(buf);

      String text = new String(buf,0,len);

      System.out.println(text);

    3,关闭资源  

     socket.close();

    

  2,服务端接收数据

    1,创建服务端socket服务。通过ServerSocket对象。

    2,服务端必须对外提供一个端口,否则客户端无法连接。

    3,获取连接过来的客户端对象。

    4,通过客户端对象获取socket流读取客户端发来的数据。并打印在控制台上。

    5,关闭资源。关客户端,关服务器。

    1,创建服务端对象

    ServerSocket ss = new ServerSocket(10002);

    2,获取连接过来的客户端对象

    Socket s = ss.accept();//阻塞式

    3,通过socket对象获取输入流,要读取客户端发来的数据

    InputStream in =s.gerInputStream();

    byte[] buf = new byte[1024];

    int len = in.read(buf);

    String text = new String(buf,0,len);

    System.out.println("server:"+text);

    3.1,使用客户端socket对象的输出流给客户端返回数据

    OutputStram out = s.getOutputStream();

    out.write("收到”.getBytes());

    4,关闭资源

    s.close();

    ss.close();

 3,tcp C/S例子:客户端发送字母数据到服务端,服务端经过大小写转换返回给客户端,并等待客户端OVER响应。

    1,客户端代码

     public class TransClient{

     public static void main(String[] args){

      //客户端

      //1,需要现有socket端点;2,客户端的数据源:键盘;3,客户端的目的:socket;4,接收服务端的数据,源:socket;5,将数据显示到控制台,目的:控制台;6,在这些流中操作的数据都是文本数据。

      //转换客户端  

      //1,创建socket客户端对象;2,获取键盘录入;3,将录入的信息发送给socket输出流。

      //1,创建socket客户端对象。

      Socket s = new Socket("192.168.1.100",1004);

      //2,获取键盘录入

      BufferedReader bufr = 

          new BufferedReader(new InputStreamReader(System.in));

      //3,socket输出流

      PrintWriter out = new PrintWriter(s.getOutputStream(),true);

      //4,socket输入流,读取服务端返回的大写数据

      BufferedReader burIn =

       new BufferedReader(new InputStreamReader(s.getInputStream()));

      

      String line = null;

      while(line=buffr.readLine())!=null){

        if("over".equals(line))

          break;

       out.println(line);

       //读取服务端返回的大写数据

       String uperStr = bufIn.readLine();

       System.out.println(upperStr);

      }

      s.close();

}

}

  2,服务端代码

  public class TransServer{

    public static void main(String[] args){

    //装换服务端

    //1,ServerSocket服务;2,获取socket对象;3,源:socket,读取客户端发过来的需要转换的数据;4,目的:显示在控制台上;5,将数据转化大写,发给客户端;

    //1,创建ServerSocket服务

     ServerSocket ss = new ServerSoket(10004);

    //2,获取socket对象

     Socket s = ss.accept();

      //获取IP

      String ip = s.getInetAddress().getHostAddress();

      System.out.println(ip+".......connected");

    //3,获取socket读取流,并装饰

    BufferedReader bufIn =         

      new BufferedReader(new InputStreamReader(s.getInputStream()));

    //4,获取socket的输出流,并装饰

     PrintWrinter out = new PrintWriter(s.getOutputStream(),true);

      String line = null;

      while(line=bufIn.readLine())!=null){

        System.out.println(line);

        out.println(line.toUpperCase());

}

  s.close();

  ss.close();

}

}

原文地址:https://www.cnblogs.com/jinb/p/6233830.html