Java网络编程

TCP特点:

  • 通讯之前要先建立连接
  • 是可靠的协议,效率慢
  • 有序性

UDP特点:

  • 只管发送,不考虑对方是否接收的到
  • 不可靠协议,效率高(QQ消息,语音,视频,网络游戏传输)

网络编程(socket编程)

java.net

  • ServerSocket和Client是实现TCP连接的
  • 端口号:Port number,65536个端口号 用来区分同一台电脑上的不同应用程序,系统一般使用1024以下的端口。
    • tcp端口有65536,udp端口也有65536个。

各种API:

  • InetAddress

    • InetAddress.getByName("www.qq.com");
    • InetAddress.getByName("127.0.0.1");
    • InetAddress.getLocalHost();
    • InetAddress.getLocalHost().getHostName();
    • InetAddress.getLocalHost().getHostAddress();
  • Socket:代表网络连接

    • 客户端:Socket s = new Socket(“127.0.0.1”,8000);

      /**简单的Socket客户端 功能为:发送字符串“Hello”到服务器端,并打印出服务器端的反馈*/
      public class SimpleSocketClient {
      public static void main(String[] args) {
      Socket socket = null;
      InputStream is = null;
      OutputStream os = null;
      // 服务器端IP地址
      String serverIP = "127.0.0.1";
      // 服务器端端口号
      int port = 10000;
      // 发送内容
      String data = "Hello";
      try {
      // 建立连接
      socket = new Socket(serverIP, port);
      // 发送数据
      os = socket.getOutputStream();
      os.write(data.getBytes());
      // 接收数据
      is = socket.getInputStream();
      byte[] b = new byte[1024];
      int n = is.read(b);
      // 输出反馈数据
      System.out.println("服务器反馈:" + new String(b, 0, n));
      } catch (Exception e) {
      e.printStackTrace(); // 打印异常信息
      } finally {
      try {
      // 关闭流和连接
      is.close();
      os.close();
      socket.close();
      } catch (Exception e2) {
      }
      }
      }
      }

    • 服务器:ServerSocket ss = new ServerSocket(port);

      import java.io.InputStream;
      import java.io.OutputStream;
      import java.net.ServerSocket;
      import java.net.Socket;
      /** 服务器 功能:将客户端发送的内容反馈给客户端*/
      public class SimpleSocketServer {
      public static void main(String[] args) {
      ServerSocket serverSocket = null;
      Socket socket = null;
      OutputStream os = null;
      InputStream is = null;
      // 监听端口号
      int port = 10000;
      try {
      // 建立连接
      serverSocket = new ServerSocket(port);
      // 获得连接
      socket = serverSocket.accept();
      // 接收客户端发送内容
      is = socket.getInputStream();
      byte[] b = new byte[1024];
      int n = is.read(b);
      // 输出
      System.out.println("客户端发送内容为:" + new String(b, 0, n));
      // 向客户端发送反馈内容
      os = socket.getOutputStream();
      os.write(b, 0, n);
      } catch (Exception e) {
      e.printStackTrace();
      } finally {
      try {
      // 关闭流和连接
      os.close();
      is.close();
      socket.close();
      serverSocket.close();
      } catch (Exception e) {
      }
      }
      }
      }

  • UDP数据连接

    • DatagramSocket. 实现“网络连接”,包括客户端网络连接和服务器端网络连接。

    • DatagramPacket. 类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。

    • UDPServer:

      public class UDPServer {

      public static void main(String[] args) throws Exception {

      byte[] buf = new byte[1024];
      DatagramPacket dp = new DatagramPacket(buf, buf.length);
      DatagramSocket ds = new DatagramSocket(7899);
      while (true) {
      ds.receive(dp);
      System.out.println(new String(buf, dp.getLength()));
      }

      }

      }

    • UDPClient:

      public class UDPClient {

      public static void main(String[] args) throws Exception {
      String s = "123";
      byte[] buf = s.getBytes();

      DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("192.168.20.249", 7899));
      DatagramSocket ds = new DatagramSocket(9999);
      ds.send(dp);
      ds.close();

      }

      }

posted @ 2017-09-15 23:06  esileme  阅读(165)  评论(0)    收藏  举报