java_关于网络编程、套接字编程

网络编程:

java语言中,提供了一套统一的编程接口,很多细节已经底层化,所以可以无痛的网络通信编程
提供的是Socket套接字技术

常用的通信协议

TCP(信息传递协议)/IP(地址信息协议):通信之前,需要建立连接,之后,要断开连接,一般有一个作为服务器端,一个作为客户端

主要将通讯模式分成4个层:
     应用层
     传输层
      IP层
    编程接口层

UDP:不需要建立连接,相对来说,开销比较小,效率高,不安全

类型:java.net.InetAddress
提供了用于获取描述主机和IP的信息功能

常用方法:

static InetAddress getByName(String host)  
    返回一个指定字符串主机的地址对象

主机名:可以使用IP来描述,还可以使用域名来使用(通常域名会邦定一个IP地址)

String getHostName()
    返回描述主机的字符串名称
String getHostAddress()
    返回描述主机的IP地址
static InetAddress getLocalHost()
    返回本地主机地址对象
/**
 * InetAddress类型的学习
 */
public class Test01 {
    public static void main(String[] args) {
        try {
            InetAddress addr = 
                    InetAddress.getByName("www.baidu.com");
            System.out.println(addr.getHostAddress());
            System.out.println(addr.getHostName());

            InetAddress local = addr.getLocalHost();
            /*本地IP联网状态下,是网络终端的服务器随机分配的IP*/
            System.out.println(local.getHostAddress());
            System.out.println(local.getHostName());

            /* 不联网状态下,我们的本地IP和主机名
             * 可以使用127.0.0.1和localHost来替代
             */
            InetAddress lo = InetAddress.getByName("127.0.0.1");
            System.out.println(lo);
            lo = InetAddress.getByName("localHost");
            System.out.println(lo);

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

这里写图片描述

套接字编程

Socket
    在客户端使用,连接成功后会获取一个Socket对象
ServerSocket
    在服务器端使用创建服务器端套接字对象,被连接后,获取一个Socket对象

注意:通信是使用各自获取的Socket对象来通信

编写步骤:   
服务器对象
服务器等待被连接
客户端连接服务器(成功与否)
客户端与服务端通信
断开连接

端口号:是一个16位,无符号二进制整数,0-65535
IP一起用来指定一个运行中程序的位置
所以这么说:端口号是运行程序的唯一标识符,即程序运行时,端口号不能碰撞

通常0-1023是操作系统预定义的端口,所以,我们在自定义时,应该尽可能使用1024-65535范围的数

ServerSocket类的使用

构造器:

    ServerSocket(int port)
        创建一个指定端口号的ServerSocket对象

常用方法:

    Socket accept()
        等待客户端连接,返回客户端对象
    void close()
        关闭套接字
    InetAddress getInetAddress()
        获取服务端的地址
    int getLocalPort()
        获取服务端口号
    SocketAddress getLocalSocketAddress()
        获取

Socket类的使用

构造器:

    Socket(String host, int port)
        向指定的主机名和指定端口号的服务发送请求连接,连接成功,获取Socket对象

常用方法:

    void close()
        关闭套接字
    InetAddress getInetAddress()
        返回套接字所连接服务器的地址。
    int getPort()
        返回套接字所连接远程机器的窗口号
    int getLocalPort()
        返回本地端口
    InputStream getInputStream()
        获取输入流对象,接收远程机器发送的信息
    OutputStream getOutputStream()
        获取输出流对象,向远程机器发送信息
/**
 * 服务器端编程:ServerSocket
 */
public class Server {
    private ServerSocket server;

    public Server() {
        /*
         * 构造器ServerSocket(int port)
         * 使用指定的端口号来创建一个服务套接字对象
         */
        try {
            server = new ServerSocket(8088);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private void start() {
        try {
            System.out.println("-----等待被连接-----");
            /*
             * Socket accept()
             * 有阻塞效果,等待被客户端连接
             */
            Socket socket = server.accept();
            System.out.println("-----连接成功-----");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        Server server = new Server();
        server.start();
    }
}
/**
 * 客户端的编写
 */
public class Client {
    private Socket socket;

    public Client() {
        try {
            System.out.println("-----正在努力连接服务器-----");
            socket = new Socket("localHost", 8088);
            System.out.println("-----连接服务器成功-----");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private void start() {

    }
    public static void main(String[] args) {
        Client client = new Client();
        client.start();
    }
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/yc_hen/article/details/82315443
今日推荐