zoukankan      html  css  js  c++  java
  • 黑马程序员---java基础-Java之网络编程

    一、概念

    网络通信三要素:IP地址,端口号,传输协议

     

    IP地址:

    它是网络中的设备标识,java中对应的是InetAddress类,存在于java.net包中。

     

    端口号:

            a、用于标识进程的逻辑地址,不用进程的标识。

            b、有效端口:0 ~65535,系统使用或保留的端口是:0~ 1024

     

    传输协议:

            即通信规则,包含TCPUDP协议

     

    二、Socket

    套接字,通信的端点。

    就是为网络服务提供的一种机制,通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。

    示例:

     1 public class NetDemo {
     2     public static void main(String[] args) throws Exception {
     3         Socket s = new Socket("www.baidu.com", 8080);
     4         BufferedReader br = new BufferedReader(new InputStreamReader(
     5                 s.getInputStream()));
     6         String line;
     7         while ((line = br.readLine()) != null) {
     8             System.out.println(line);
     9         }
    10     }
    11 }

    三、TCP传输

    两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流。该流中既有读取,也有写入。

    tcp的两个端点:

     

    一个是客户端,一个是服务端。

    客户端:对应的对象,Socket

    服务端:对应的对象,ServerSocket

    TCP客户端:

    1,建立tcpsocket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)

    2,如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStreamgetOutputStream就可以获取两个流对象。

    3,关闭资源。

    TCP服务端:

     

    1,创建服务端socket服务,并监听一个端口。

    2,服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象。

    3,可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。

    4,如果通讯结束,关闭资源。注意:要先关客户端,再关服务端。

     

    tcp客户端

     1 public class TcpClient {
     2     public static void main(String[] args) throws Exception {
     3         Socket s;
     4         s = new Socket("127.0.0.1", 1000);
     5         OutputStream os = s.getOutputStream();
     6         os.write("你好".getBytes());
     7         InputStream is = s.getInputStream();
     8         byte[] buff = new byte[1024];
     9         int len;
    10         len = is.read(buff);
    11         System.out.println(new String(buff, 0, len));
    12         s.close();
    13     }
    14 }

    tcp服务端

    public class TcpServer {
        public static void main(String[] args) throws Exception {
            ServerSocket ss = new ServerSocket(1000);
            Socket s = ss.accept();
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip + "is connected");
            InputStream is = s.getInputStream();
            byte[] buff = new byte[1024];
            int len = is.read(buff);
            System.out.println(new String(buff, 0, len));
            OutputStream os = s.getOutputStream();
            os.write("已收到".getBytes());
            s.close();
            ss.close();
        }
    }

     

    客户端和服务的浏览器演示:

    浏览器是一个标准的客户端,它可以对服务端传送过来的数据消息进行解析,把符合应用层协议的消息部分解析后,将头信息拆包掉,传送到应用层,只保留了正确的正文主题部分显示在主体部分上。

    而由于使用java编译是在传输层和网际层处理的,所以,会接受到全部的消息,包含了头消息。而浏览器处于应用层,已将发送来的头消息去除,只留下了主体信息。

     1 /*
     2  * 在浏览器输入:http://localhost:11000/
     3  * 即可访问,返回"客户端你好"
     4  */
     5 public class ServerDemo {
     6 
     7     public static void main(String[] args) throws Exception {
     8         ServerSocket ss = new ServerSocket(11000);
     9 
    10         System.out.println("等待接收...");
    11         Socket s = ss.accept();
    12         System.out.println("成功");
    13         System.out.println(s.getInetAddress().getHostAddress());
    14 
    15         InputStream in = s.getInputStream();
    16         byte[] buf = new byte[1024];
    17         int len = in.read(buf);
    18         System.out.println(new String(buf, 0, len));
    19 
    20         // 返回信息写入客户端输出流
    21         PrintWriter out = new PrintWriter(s.getOutputStream(), true);// true一定要写
    22         out.println("<font color='red' size='7'>客户端你好</font>");
    23         s.close();
    24         ss.close();
    25     }
    26 }

    四、URL和URLConnection

    1URL

            URI:范围更大,条形码也包含于此范围

            URL:范围较小,即域名

    方法:

            1)构造函数:URL(String protocol,String host,int port,String file);//根据指定 protocolhostport号和 file 创建 URL对象。

            2String getProtocol();//获取协议名称

            3String getHost();//获取主机名

            4int getPort();//获取端口号

            5String getFile();//获取URL文件名

            6String getPath();//获取此URL的路径部分

            7String getQuery();//获取此URL的查询部,客户端传输的特定信息

     

    注:一般输入网址,是不带端口号的,此时可进行获取,通过获取网址返回的port,若port-1,则分配一个默认的80端口,如

            int port = getPort();

            if(port == -1)

                  port = 80;

     

    2URLConnection

    方法:

            1URLConnection openConnection();//URL调用此方法,返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。

            2InputStream getInputStream();//获取输入流

            3OutputStream getOutputStream();//获取输出流

    例:

     1 public class URLConnectionDemo {
     2     public static void main(String[] args) {
     3         // TODO Auto-generated method stub
     4         /*try {
     5             URL url = new URL("http://www.baidu.com");
     6             
     7             URLConnection conn = url.openConnection();
     8             
     9             InputStream is =conn.getInputStream();
    10             byte[] buff = new byte[1024];
    11             int len;
    12             len = is.read(buff);
    13             System.out.println(new String(buff, 0, len));
    14             
    15         } catch (MalformedURLException e) {
    16             // TODO Auto-generated catch block
    17             e.printStackTrace();
    18         }catch (IOException e) {
    19             // TODO Auto-generated catch block
    20             e.printStackTrace();
    21         }*/
    22         
    23         URL url;
    24         try {
    25             url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");
    26             System.out.println("getProtocol() :"+url.getProtocol());
    27             System.out.println("getHost() :"+url.getHost());
    28             System.out.println("getPort() :"+url.getPort());
    29             System.out.println("getPath() :"+url.getPath());
    30             System.out.println("getFile() :"+url.getFile());
    31             System.out.println("getQuery() :"+url.getQuery());
    32 
    33             /*int port = getPort();
    34             if(port==-1)
    35                 port = 80;
    36             getPort()==-1
    37             */
    38         } catch (MalformedURLException e) {
    39             // TODO Auto-generated catch block
    40             e.printStackTrace();
    41         }
    42     }
    43 }
    44 /*
    45  *  getProtocol() :http
    46     getHost() :192.168.1.254
    47     getPort() :-1
    48     getPath() :/myweb/demo.html
    49     getFile() :/myweb/demo.html?name=haha&age=30
    50     getQuery() :name=haha&age=30
    51  */

     

     

  • 相关阅读:
    javascript闭包和作用域链
    关于git的简单实用命令
    springMVC配置Json
    Python基础教程(010)--第一个程序Hello Python
    Python基础教程(009)--Python程序的格式以及扩展名
    Python基础教程(008)--第一个Python程序
    Python基础教程(007)--Python的优缺点
    Python基础教程(006)--Python的特点
    Python基础教程(005)--为什么要学习Python?
    Python基础教程(004)--Python的设计哲学
  • 原文地址:https://www.cnblogs.com/ZkSnug/p/4457648.html
Copyright © 2011-2022 走看看