• Java网络编程


    Socket

    • 两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket。
    • Socket通常用来实现 client-server 连接。
    • java.net 包中定义的两个类 Socket 和 ServerSocket ,分别用来实现双向连接的 client 和 server 端。
    • 建立连接时所需的寻址信息为远程计算机的  IP 地址和端口号(Port number)。

    Tcp Socket 通信模型

    Socket使用示例:

    public class Test {
        public static void main(String[] args) throws IOException{
            try (Socket s = new Socket("time-A.timefreq.bldrdoc.gov", 13)){ //打开一个套接字
                InputStream inStream = s.getInputStream(); //返回一个InputStream对象
                Scanner in = new Scanner(inStream);
                while(in.hasNextLine()){
                    String line = in.nextLine();
                    System.out.println(line);
                }
            }
        }
    }

    Socket对象:

    • Socket(String host, int port):构建一个套接字,用来连接给定的主机和端口;该方法会一直无限期阻塞下去,直到建立了到达主机的初始连接为止;  
    • InputStream getInputStream():获取可以从套接字中读取数据的流;  
    • OutputStream getOutputStream():获取可以向套接字中写出数据的流;
    • Socket():创建一个还未被连接的套接字;
    • void connect(SocketAddress address):将该套接字连接到给定的地址;
    • void connect(SocketAddress address, int timeoutInMilliseconds):将套接字连接到给定的地址。如果在给定的时间内没有响应,则返回;
    • void setSoTimeout(int timeoutInMilliseconds):设置该套接字上读请求的阻塞时间。如果超出给定时间,则抛出一个InterruptedIOException异常;
    • boolean isConnected():如果该套接字已被连接,则返回true;
    • boolean isClosed():如果该套接字已经被关闭,则返回true;
    Socket s = new Socket();
    s.connect(new InetSocketAddress(host, port), timeout);
    //InetSocketAddress是SocketAddress的实现子类,SocketAddress是一个抽象类

     InetAddress对象:

    • static InetAddress getByName(String host)
    • static InetAddress[] getAllByName(String host):为给定的主机名创建一个InetAddress对象,或者一个包含了该主机名所对应的所有因特网地址的数组;
    • static InetAddress getlocalHost():为本地主机创建一个InetAddress对象;
    • byte[] getAddress():返回一个包含数字型地址的字节数组;
    • String getHostAddress():返回一个由十进制数组成的字符串,个数字间用圆点符号隔开,例如"132.163.4.102";
    • String getHostName():返回主机名;
    InetAddress address = InetAddress.getByName(""time-A.timefreq.bldrdoc.gov"");//返回一个InetAddress对象,该对象封装了一个4字节的序列:132.163.4.104  
    byte[] addressBytes = address.getAddress();
    InetAddress[] addresses = InetAddress.getAllByName(host);
    InetAddress address = InetAddress.getLocalHost();

     ServerSocket对象:

    • ServerSocket(int port):创建一个监听端口的服务器套接字;
    • Socket accept():等待连接。该方法阻塞(即使之空闲)当前线程直到建立连接为止。该方法返回一个Socket对象,程序可以通过这个对象与连接中的客户端进行通信;
    • void close():关闭服务器套接字; 

    C/S实例:

    服务端

    import java.net.*;
    import java.io.*;
    public class TCPServer {
        public static void main(String[] args) throws Exception {
            ServerSocket ss = new ServerSocket(6666);
            while(true) {
                Socket s = ss.accept();
                System.out.println("a client connect!");
                DataInputStream dis = new DataInputStream(s.getInputStream());
                System.out.println(dis.readUTF());
                dis.close();
                s.close();
            }
        }
    }

     客户端

    import java.net.*;
    import java.io.*;
    public class TCPClient {
        public static void main(String[] args) throws Exception{
            Socket s = new Socket("127.0.0.1", 6666);
            OutputStream os = s.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            Thread.sleep(30000);
            dos.writeUTF("hello server!");
            dos.flush();
            dos.close();
            s.close();
        }
    }
  • 相关阅读:
    BUAA_OO_2020_Unit3 Summary
    BUAA_OO_2020_Unit2 Summary
    DataFrame的遍历
    ESMM提升CVR的论文summary
    FaceBook 关于提升CTR的论文研究
    OO终章·GRAND BATTLE
    第三单元规格作业博客总结
    OO电梯单元作业总结
    【OO多项式求导作业总结】
    提问回顾与个人总结
  • 原文地址:https://www.cnblogs.com/dear_diary/p/6625824.html
Copyright © 2020-2023  润新知