`

JAVA2核心技术卷II -- 第3章. 网络

阅读更多

1. 基本Socket链接

    Socket s = new Socketserver, port);

    try {

        InputStream inStream = s.getInputStream();

        Scanner in = new Scanner(inStream);

        while (in.hasNextLine()) {

            String line = in.nextLine();

        }

    } finally {

        s.close();

    } 

2. 服务器编写

    ServerSocket s = new ServerSocket(port);

    Socket incoming = s.accept();

    try {

        InputStream inStream = incoming.getInputStream();

        OutputStream outStream = incoming.getOutputStream();

        Scanner in = new Scanner(inStream);

        PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);

        out.println("Hello! Enter BYE to exit.");

        boolean done = false;

        while (!done && in.hasNextLine()) {

            String line = in.nextLine();

            out.println("Echo: " + line);

            if (line.trim().equals("BYE")) {

                done = true;

            }

        }

    } finally {

        incoming.close();

    }

3. 提供多线程访问的服务器

    ServerSocket s = new ServerSocket(port);

    while(true) {

        Socket incoming = s.accept();

        Runnable r = new ThreadedEchoHandler(incoming);

        Thread t = new Thread(r);

        t.start();

    }

    class ThreadedEchoHandler implements Runnable {

        public ThreadedEchoHandler(Socket i) {

            incoming = i;

        }

        public void run() {like up}

    }

4. 发送Mail

    Socket s = new Socket(mailServerName, port);

    InputStream inStream = s.getInputStream();

    OutputStream outStream = s.getOutputStream();

    in = new Scanner(inStream);         

    out = new PrintWriter(outStream, true /* autoFlush */);

    String hostName = InetAddress.getLocalHost().getHostName();

    receive();

    send("HELO " + hostName);

    receive();

    send("MAIL FROM: <" + from.getText() + ">");

    receive();

    send("RCPT TO: <" + to.getText() + ">");

    receive();

    send("DATA");

    receive();

    send(message.getText());

    send(".");

    receive();

    s.close();

    public void send(String s) throws IOException {  

        comm.append(s);

        comm.append("\n");

        out.print(s.replaceAll("\n", "\r\n"));

        out.print("\r\n");

        out.flush();

    }

    public void receive() throws IOException {

        if (in.hasNextLine()) {

            String line = in.nextLine();

            comm.append(line);

            comm.append("\n");

        }

    }

5. 通过URL连接获取服务器信息

    URL url = new URL(urlName);    //新建URL对象

    URLConnection connection = url.openConnection();    //打开URL连接

    connection.setRequestProperty("Authorization", "Basic " + encoding);    //设置用户名和密码访问属性

    connection.connect();    //开始连接

    Map<String, List<String>> headers = connection.getHeaderFields();    //返回header的所有键值对

    for (Map.Entry<String, List<String>> entry : headers.entrySet()) {

        String key = entry.getKey();    //得到键

        for (String value : entry.getValue())

            System.out.println(key + ": " + value);    //得到值

    }

    System.out.println("getContentType: " + connection.getContentType());    //获取内容类型,比如text/plain

    System.out.println("getContentLength: " + connection.getContentLength());    //返回内容长度

    System.out.println("getContentEncoding: " + connection.getContentEncoding());    //获取内容编码,比如gzip

    System.out.println("getDate: " + connection.getDate());    //获取创建时间

    System.out.println("getExpiration: " + connection.getExpiration());    //获取过期时间

    System.out.println("getLastModifed: " + connection.getLastModified());    //获取最后修改时间

    Scanner in = new Scanner(connection.getInputStream());

    for (int n = 1; in.hasNextLine() && n <= 10; n++)    //打印前10行内容

        System.out.println(in.nextLine());

6. 提交表单到服务器

    GET方式: 将参数附在URL结尾,空格由+来代替,但是参数长度有限制

    POST方式: 通过表单进行数据提交

    注意: URLEncoder具有encode(String s, String encoding)和decode(String s, String encoding)方法

    URL url = new URL(urlString);

    URLConnection connection = url.openConnection();

    connection.setDoOutput(true);    //建立一个用于输出的连接

    PrintWriter out = new PrintWriter(connection.getOutputStream());    //使用该流向服务器发信息

    boolean first = true;

    for (Map.Entry<String, String> pair : nameValuePairs.entrySet()) {  

        if (first) first = false; 

        else out.print('&'); 

        String name = pair.getKey();

        String value = pair.getValue();

        out.print(name);

        out.print('=');

        out.print(URLEncoder.encode(value, "UTF-8"));

    }    //向输出流加入参数

    out.close();

    //得到返回信息    

    Scanner in;

    StringBuilder response = new StringBuilder();

    try {

        in = new Scanner(connection.getInputStream());

    } catch (IOException e) {

        if (!(connection instanceof HttpURLConnection)) throw e;

        InputStream err = ((HttpURLConnection)connection).getErrorStream();

        if (err == null) throw e;

        in = new Scanner(err);

    }

    while (in.hasNextLine()) {

        response.append(in.nextLine());

        response.append("\n");

    }

    in.close();

    return response.toString();

7. 套接字超时

    SocketChannel channel = SocketChannel.open(new InetSocketAddress("localhost", 8189));    //超时或者中断,会有InterrputedException抛出

8. 半关闭

    当一个请求给服务器发送信息,服务器必须知道该请求什么时候结束,所以需要关闭一个套接字的输出流,来表示数据已经发送结束

    Socket socket = new Socket(host, port);

    Scanner in = new Scanner(socket.getInputStream());

    PrintWriter writer = new PrintWriter(socket.getOutputStream());

    writer.print(...);

    writer.flush();

    socket.shutdownOutput();    //关闭输出流

    while (in.hasNextLine() != null) {String line = in.nextLine();}    //读返回数据

    socket.close();    //关闭整个socket

9. 通过主机名得到IP地址

    InetAddress[] address = InetAddress.getAllByName(host);    //有时主机名对应的地址不止一个,所以用数组来获取

    for (InetAddress a : address)    print address

    InetAddress address = InetAddress.getLocalHost();    //得到本机地址,而不是127.0.0.1,而是对外的IP地址

分享到:
评论

相关推荐

    JAVA核心技术-卷I 卷II-源代码

    《JAVA核心技术》是Java开发领域的经典著作,分为卷I和卷II,涵盖了Java语言的核心概念和技术。这本书深入探讨了Java编程的各种方面,是初学者和经验丰富的开发者的重要参考资料。源代码部分提供了书中示例和练习的...

    java核心技术卷二

    针对这种情况,我们只能忽略这部分内容,而无法从这里提取与标题“java核心技术卷二”和描述“java核心技术第二卷 高级特性 提供给大家学习与交流”相关的知识点。由于缺少可读和可理解的内容,我们无法对这部分进行...

    Java核心技术 卷II 高级特性 原书第10版 中文版

    根据提供的文件信息,“Java核心技术 卷II 高级特性 原书第10版 中文版”,我们可以推测这本书主要涵盖了Java高级特性的相关内容。由于实际的书籍内容无法直接访问,我们将基于标题、描述和部分可见的内容来推断并...

    ( Java核心技术 卷II 高级特性(原书第9版).zip )PDF 高清版

    《Java核心技术 卷II 高级特性》是Java开发者深入学习和掌握Java平台高级特性的经典之作,原书第9版更是集成了最新的Java技术和发展趋势。这本书详细讲解了Java编程语言的高级特性,旨在帮助程序员提升编程技能,...

    JAVA核心技术卷II源代码(第七版)

    《JAVA核心技术卷II源代码(第七版)》涵盖了Java编程语言的高级特性和核心概念,是深入理解Java技术体系的重要参考资料。源代码是学习过程中的实践基石,通过这些代码,我们可以深入了解Java在实际应用中的工作原理...

    Java核心技术 卷 I+卷II 第11版 最新英文版 pdf

    《Java核心技术 卷 I+卷II 第11版 最新英文版》是Java开发者不可或缺的参考书籍,由Cay S. Horstmann和Gary Cornell两位资深Java专家撰写。这套书籍全面覆盖了Java语言的基础和高级特性,对于深入理解和掌握Java编程...

    Core Java(Volume-I&II;--Fundamentals 9th Edition).rar

    Horstmann和Gary Cornell合著,是Java开发人员深入学习Java核心技术的重要参考资料。 《Core Java Volume I--Fundamentals 9th Edition》主要涵盖了Java语言的基础知识,包括: 1. **Java编程环境**:介绍如何...

    JAVA2核心技术卷II.高级特性 7th.part3

    不用多介绍吧,中文的,JAVA2 核心技术 卷II 高级特性 第七版

    core Java 11 Edition Java核心技术 卷一卷二

    《核心Java 11版:Java核心技术 卷一卷二》是Java开发人员的重要参考资料,涵盖了从基础到高级的广泛主题。这套书籍深入讲解了Java 11版本的关键概念和技术,旨在帮助读者全面掌握Java编程。 卷一主要关注基础知识...

    Java核心技术 卷II 高级特性 第9版(中文)

    《Java核心技术 卷II 高级特性 第9版(中文)》是一本深入探讨Java编程高级特性的权威著作。本书涵盖了Java开发中的诸多关键概念和技术,旨在帮助Java开发者提升技能,掌握更深层次的编程知识。以下是对书中部分关键...

    Java2核心技术第I卷,第II卷.rar

    《Java2核心技术》是Java编程领域的一本经典著作,分为第一卷和第二卷,涵盖了Java语言的各个方面。这本书深入浅出地介绍了Java的核心概念和技术,是学习和掌握Java编程的必备参考书。以下是对这两卷内容的详细解读...

    Java 2核心技术 卷II:高级特性(第七版).part2

    &lt;br&gt; 译者序 前言 第1章 多线程 第2章 集合 第3章 网络 第4章 数据库编程 第5章 分布式对象 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化...

    JAVA核心技术第二卷-原书第9版

    《JAVA核心技术第二卷-原书第9版》是面向已经具备一定JAVA基础知识的学习者的一本经典教程,它深度探讨了JAVA SE7的API,并且涵盖了JAVA编程的高级特性。这本书的特点在于其清晰的目录结构和高清晰度的内容,使得...

    Java 2核心技术 卷II:高级特性(第七版).part3

    &lt;br&gt; 译者序 前言 第1章 多线程 第2章 集合 第3章 网络 第4章 数据库编程 第5章 分布式对象 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化...

    Java 2核心技术 卷II:高级特性(第七版).part1

    &lt;br&gt; 译者序 前言 第1章 多线程 第2章 集合 第3章 网络 第4章 数据库编程 第5章 分布式对象 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化...

    JAVA 2 核心技术 卷II:高级特性7th.part3

    JAVA 2 核心技术 卷II:高级特性第七版 中文版 part3 一共四部分,全部下载完毕解压既可。

Global site tag (gtag.js) - Google Analytics