JAVA基础之网络编程

        Socket socket = new Socket();
        try {
            socket.connect(new InetSocketAddress("*.com", 80), 10000);
            InputStream inputStream = socket.getInputStream();
            Scanner in = new Scanner(inputStream);
            while (in.hasNextLine()) {
                String line = (String) in.next();
                System.out.println(line);
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //连接超时时new Socket会一直阻塞,直到连通
        Socket socket = new Socket("*.com", 80);
        InetAddress[] address = InetAddress.getAllByName("*.com");
        for (InetAddress a : address) {
            System.out.println(a);
        }
        //localhost地址
        InetAddress local = InetAddress.getLocalHost();
        System.out.println(local);
        ServerSocket server = new ServerSocket(8189);
        //监控8189端口
        Socket comeSocket = server.accept();
        InputStream in = comeSocket.getInputStream();
        Scanner scanner = new Scanner(in);
        OutputStream out = comeSocket.getOutputStream();
        PrintWriter writer = new PrintWriter(out, true);
        while (scanner.hasNext()) {
            String string = (String) scanner.next();
            System.out.println(string);
            writer.println("test 8189=" + string);
        }
        comeSocket.close();
        ServerSocket server = new ServerSocket(8189);
        //监控8189端口
        while (true) {
            int i = 0;
            Socket comeSocket = server.accept();
            Runnable r = new ThreadedEchoHandler(comeSocket);
            Thread t = new Thread(r);
            t.start();
            i++;
        }
        
    //ThreadedEchoHandler.java
    public class ThreadedEchoHandler implements Runnable {
    private Socket imcoming;

    public ThreadedEchoHandler(Socket imcoming) {
        this.imcoming = imcoming;
    }

    @Override
    public void run() {
        try {
            InputStream inputStream = imcoming.getInputStream();
            Scanner scanner = new Scanner(inputStream);
            OutputStream out = imcoming.getOutputStream();
            PrintWriter writer = new PrintWriter(out, true);
            while (scanner.hasNext()) {
                String string = (String) scanner.next();
                System.out.println(string);
                writer.println("test 8189=" + string);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                imcoming.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
//Socket半关闭,比如http请求(一次性)时适用
        Socket socket = new Socket();
        try {
            socket.connect(new InetSocketAddress("*.com", 80), 10000);
            InputStream inputStream = socket.getInputStream();
            Scanner in = new Scanner(inputStream);
            PrintWriter writer = new PrintWriter(socket.getOutputStream());
            //send request data
            writer.print("test");
            writer.flush();
            socket.shutdownOutput();//socket半关闭状态(输出关闭,输入不关闭)
            while (!Thread.currentThread().isInterrupted()) {
                while (in.hasNextLine()) {
                    String string = (String) in.next();
                }
            }
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        SocketChannel channel = SocketChannel.open(new InetSocketAddress("", 80));
        Scanner in = new Scanner(channel);
        OutputStream outputStream = Channels.newOutputStream(channel);

获取web数据

1)URL(Uniform Resource Locator)统一资源定位符 是 URI(Uniform Resource Identifier)的一个特例

    mailto:[email protected]

    不属于URL,因为无法定位任何数据,像这样的URI称之为URN(Uniform Resource name)统一资源名称。

2)获取web表单数据

        URL url = new URL("");
        InputStream inputStream = url.openStream();
        Scanner in = new Scanner(inputStream);
        String urlName;
        if (args.length > 0)
            urlName = args[0];
        else
            urlName = "http://news.163.com";

        URL url = new URL(urlName);
        URLConnection connection = url.openConnection();
        connection.connect();
        //header fields
        Map<String, List<String>> headers = connection.getHeaderFields();
        for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
            String key = entry.getKey();
            for (String value : entry.getValue())
                System.out.println(key + ":" + value);
        }

        //print header elements
        System.out.println("------------------------------------------");
        System.out.println("getContentType:" + connection.getContentType());
        System.out.println("getContentLength:" + connection.getContentLength());
        System.out.println("getContentEncoding:" + connection.getContentEncoding());
        System.out.println("getDate:" + connection.getDate());
        System.out.println("getExpiration:" + connection.getExpiration());
        System.out.println("getLastModified:" + connection.getLastModified());
        System.out.println("------------------------------------------");

        Scanner in = new Scanner(connection.getInputStream());
        //print first ten lines
        for (int n = 1; in.hasNextLine() && n <= 10; n++) {
            System.out.println(in.nextLine());
            if (in.hasNextLine()) System.out.println("...");
        }

3)提交web表单数据

  1. 保留字符:A-Z、a-z、0-9、. -*_

  2. +代替所有空格

  3. 将其它所有字符编码为UTF-8,并将每个字节都编码为%后面紧跟1,2位16进制

    比如:New York, NY可以使用New+York%2C+NY

        public static void main(String[] args) {
        Properties props = new Properties();
        try {
            InputStream in = new FileInputStream("");
            props.load(in);
            String url = props.remove("url").toString();
            String result = doPost(url, props);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String doPost(String urlSting, Map<Object, Object> map) throws Exception {
        URL url = new URL(urlSting);
        URLConnection connection = url.openConnection();
        connection.setDoOutput(true);
        PrintWriter out = new PrintWriter(connection.getOutputStream());
        boolean first = true;
        for (Map.Entry<Object, Object> pair : map.entrySet()) {
            if (first)
                first = false;
            else
                out.print('&');
            String name = pair.getKey().toString();
            String value = pair.getValue().toString();
            out.print(name);
            out.print("=");
            out.print(URLEncoder.encode(value, "UTF-8"));
        }

        StringBuilder response = new StringBuilder();
        try {
            Scanner in = new Scanner(connection.getInputStream());
            while (in.hasNextLine()) {
                response.append(in.nextLine());
                response.append("\n");
            }
        } catch (Exception e) {
            if (!(connection instanceof HttpURLConnection))
                throw e;
            InputStream err = ((HttpURLConnection) connection).getErrorStream();
            if (err == null)
                throw e;
            Scanner in = new Scanner(err);
            response.append(in.nextLine());
            response.append("\n");
        }
        return response.toString();
    }


你可能感兴趣的:(JAVA基础之网络编程)