• Java基础--网络编程


    1.网络的概念

    把多台计算机通过物理线路连接起来,就形成了网络。目的在于交换数据和共享信息。

    2.网络通信的三要素:

    1】IP地址:唯一标识网络上的每一台计算机。两台计算机之间通信的必备有素

    2】端口号:计算机中应用的标号(代表一个应用程序)

    0-1024系统使用或保留端口

    常见端口:http:80 stmp: 25 ftp:21

        有效端口0-65536,开发者可以的端口是1025-65536之间。一些第三方引用如mysql:3306 oracle:1251。

    3】通信协议:通信的规则 TCP,UDP

    3.网络通信模型

    4.InetAdress

    InetAddress 表示IP地址。

     1 public class Test01 {
     2     public static void main(String[] args) {
     3         // 获取本机IP地址
     4         InetAddress ip1;
     5         try {
     6             ip1 = InetAddress.getLocalHost();
     7             // USER-20180113BT/192.168.2.56
     8             System.out.println(ip1.toString());
     9             
    10             // 获取主机名称
    11             System.out.println(ip1.getHostName());
    12             System.out.println(ip1.getHostAddress());
    13             
    14         } catch (UnknownHostException e) {
    15             e.printStackTrace();
    16         }
    17     }
    18 }

     5.TCP编程

    TCP编程中,如果要完成通信,通信双方必须要创建socket,通过socket完成通信。

    TCP通信步骤

    [1] 服务器启动ServerSocket作为通信的Server端,等待客户端链入。

    [2] 客户端创建Socket作为通信的Client端

    [3] Client端链入Server端后建立可靠的双向的持续性的点对点的通讯连接,即可通信。

    案例:完成一次单向通信

    服务器端

     1 package cn.sxt01.net01;
     2 
     3 import java.io.IOException;
     4 import java.io.OutputStream;
     5 import java.net.ServerSocket;
     6 import java.net.Socket;
     7 
     8 public class Server01 {
     9     public static void main(String[] args) {
    10         
    11         System.out.println("服务器启动...");
    12         
    13         // 【1】创建server socket
    14         ServerSocket serverSocket = null;
    15         Socket clientSocket = null;
    16         try {
    17         
    18             serverSocket = new ServerSocket(8000);
    19             // 【2】等待客户端的链入->阻塞式函数->监听8000端口,看是否有client链入
    20             clientSocket = serverSocket.accept();
    21             
    22             System.out.println(clientSocket.getInetAddress().getHostAddress()+"链入!");
    23         
    24             // 【3】给客户端主动发信息
    25             OutputStream out = clientSocket.getOutputStream();
    26             
    27             String msg = "hello 兄弟";
    28             byte[] buf = msg.getBytes("UTF-8");
    29             out.write(buf);
    30             clientSocket.shutdownOutput();
    31             
    32             out.close();
    33             
    34         
    35         } catch (IOException e) {
    36             e.printStackTrace();
    37         }
    38     }
    39 }

    客户端

     1 package cn.sxt02.net01;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.net.Socket;
     6 
     7 public class Client01 {
     8     public static void main(String[] args) {
     9         System.out.println("客户端运行...");
    10         
    11         // 【1】创建客户端socket
    12         Socket socket = null;
    13         try {
    14             socket = new Socket("192.168.2.56", 8000);
    15             
    16             // 【2】接收来自服务器的消息
    17             InputStream in = socket.getInputStream();
    18             byte[] buf = new byte[1024];
    19             int len = in.read(buf);
    20             
    21             String msg = new String(buf, 0, len, "UTF-8");
    22             System.out.println(msg);
    23             
    24         } catch (IOException e) {
    25             e.printStackTrace();
    26         }
    27     }
    28 }

     6.常见问题

    [1] 端口被占用

    java.net.BindException: Address already in use: JVM_Bind

    【2】服务器未启动

    java.net.ConnectException: Connection refused: connect

    【3】连接超时异常 SocketTimeoutException

    当网速很慢时,可能发生连接超时异常。

  • 相关阅读:
    迭代器设计模式
    python中的turtle库绘制图形
    Tesseract-OCR4.0识别中文与训练字库实例
    java图片处理
    Tess4J OCR简单使用教程
    C++ 排列最优解算法思想
    Swing使用JavaFXweb组件
    java专业术语
    java的分数类
    System Rules 更好的测试
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/10846976.html
Copyright © 2020-2023  润新知