博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net转Java自学之路—基础巩固篇十七(网络编程、Tomcat、URL)
阅读量:6831 次
发布时间:2019-06-26

本文共 6112 字,大约阅读时间需要 20 分钟。

网络编程

  网络模型:

    OSI模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

    TCP/IP模型:应用层、传输层、网际层、数据链路层。

  网络通讯最基本的三大要素:IP地址、端口号、传输协议。

  网络编程主要作用于:传输层、网际层。

  IP地址:

/** IP地址:*     InetAddress类 import java.net.*;*/InetAddress ip = InetAddress.getLocalHost();ip.getHostAddress();//本地IP地址ip.getHostName();//本地主机名ip=InetAddress.getByName("ip地址/域名");//没有连接成功会报 UnknowHostException 未知主异常ip.getHostAddress();//指定机器的IP地址ip.getHostName();//指定机器的主机名getAllByName(strHost);//获取一个主机对应的所有IP地址

  端口号:

    逻辑端口就是给应用程序分配的一个数字标识。

  传输协议:

    通讯规则。常见的协议有:TCP、UDP。

    UDP:将数据及技术员和目的封装成数据包中,不需要建立连接。数据包的大小限制在64k内。因为不需要建立连接,所以速度快;但 是不可靠协议。

    TCP:需要建立连接,形成传输数据的通道。在连接中可以进行大数据量传输。效率低、速度相对慢,但 是可靠协议。

  Socket机制:

    网络编程也就是Socket编程。Socket就是为网络服务提供的一种机制。

    网络通信就是Socket间的通信,数据是在俩个Socket间的IO传输。

    UDP:

      关联的对象:DatagramSocket、Datagrampacket

//发送端DatagramSocket ds = new DatagramSocket();byte[] bytes = "数据内容".getBytes();DatagramPacket dp = new DatagramPacket(bytes,bytes.length,InetAddress.getByName("IP地址"),端口号);//发送数据ds.send(dp);//通过udp的Socket服务中的功能,完成数据包的发送。ds.close();/*接收端:*在建立udpSocket服务时,需要该应用程序定义数字标识,也就是端口,也就是说,让该应用程序监听一个端口,只要是这个端口发送的数据,该应用程序就可以进行处理。*/DatagramSocket ds = new DatagramSocket(int);//预先定义好一个数据包,用于存储接收到的数据;因为数据包中必须有一个容器存储这些数据。所以要先定义字节数据。byte[] buf = new byte[1024];DatagramPacket dp=new DatagramPacket(buf,buf.length);//使用Socket服务的receive()将接收到的数据存储到数据包中。该方法是堵塞式方法ds.receive(dp);//获取数据内容。地址、端口、数据主体String strText=new String(dp.getData(),0,dp.getLength());

    TCP:

      面向连接、可靠的协议

      客户端:Socket  

      服务器端:ServerSocket 

        服务器端没有直接流对象,通过accept()获取客户端对象

//客户端Socket sk=new Socket("IP地址",端口号);OutputStream out=sk.getOutputStream();//获取Socket的输出流out.write("数据内容".getBytes());sk.close();//服务器端ServerSocket ss=new ServerSocket(端口);Socket sk=ss.accept();//该方法式堵塞式方法String ip=sk.getInetAddress.getHostAddress();InputStream in=sk.getInputStream();//获取客户端发送的输入流byte[] bytes=new byte[1024];int len=in.read(bytes);String str=new String(bytes,0,len);sk.close();ss.close();

      TCP传输容易出现客户端和服务端都等待的情况;因为客户端和服务器端有阻塞式方法存在,比如 read()、readLine() 。所以要定义结束标记。

      read() 定义-1为结束标记。readLine() 定义回车和-1为结束标记。

实例:上传

//客户端Socket s=new Socket("ip",端口号);BufferedReader bufr=new BufferedReader(new FileReader(path));PrintWriter pw=new PrintWriter(new getOutputStream(),true);String line=null;while((line=bufr.readLine())!=null){    pw.println(line);}s.shutdownOutput();//结束标记BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));String str=bufIn.readLine();System.out.println(str);bufr.close();s.close();//服务端ServerSocket ss=new ServerSocket(端口号);Socket s=ss.accept();BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));PrintWriter pw=new PrintWriter(new FileWriter(path),true);String line=null;while((line=bufIn.readLine())!=null){    pw.println(line);}PrintWriter pwOut=new PrintWriter(s.getOutputStream(),true);pwOut.println("成功");pw.close();s.close();ss.close();

实例:TCP上传图片

1 import java.io.*; 2 import java.net.*; 3  4 Class UploadServer{ 5     public static void main(String[] args) throws Exception { 6         ServerSocket ss=new ServerSocket(端口号); 7         While(true){ 8             Socket s=ss.accept(); 9             new Thread(new PicThread(s)).start();10         }11     }12 }13 14 Class UploadClient{15     public static void main(String[] args) throws Exceptin {16         Socket s=new Socket(ip,端口号);17         FileInputStream fis=new FileInputStream(file);18         OutputStream out=s.getOutputStream();19         byte[] bytes=new byte[1024*n];20         int len=0;21         while((len=fis.read(bytes))!=-1){22             out.writer(bytes,0,len);23         }24         s.shtdownOutput();//结束标记25         InputStream in=s.getInputStream();26         byte[] buf=new byte[1024];27         len=in.read(buf);28         String str=new String(buf,0,len);29         System.out.println(sttr);30         fis.close();31         s.close();32     }33 }34 35 Class PicThread implements Runnable {36     private Socket s;37     PicThread(Socket s){38         this.s=s;39     }40 41     public void run(){42         int count=1;43         String ip=s.getInetAddress().getHostAddress();44         try{45             //获取客户端发送的数据46             InputStream in=s.getInputStream();47             byte[] bytes=new byte[1024*n];48             //定义目的,接收数据写入文件49             File dir=new File(Path);50             if(!dir.exists()) dir.mkdir();51             File file=new File(dir,ip+(count++)+".jpg");52             while(file.exists()){53                 file=new File(dir,ip+(count++)+".jpg");54             }55             FileOutputStream fos=new FileOutputStream(file);56             int len=0;57             while((len=in.read(buf))!=-1){58                  fos.write(bytes,0,len);59             }60 61             OutputStream out=s.getOutputStream();62             out.write("成功");63             fos.close();s.close();64         }catch(Exception ex){65             throw new RuntimeException(ip+"失败");66         }67     }68 }
View Code

 

Tomcat:

  服务器端应用。地址栏输入http://IP:端口号(server.xml中配置的端口号)可以访问tomcat服务器的指定资源

  访问tomcat中的自定义资源:

    只要在tomcat服务器的webapps目录下定义的应用程序即可。

  启动:

    bin文件夹下 打开startup.bat 启动tomcat。

    若启动startup.bat后窗口一闪即消失:

      检查JAVA_HOME环境变量配置是否正确

  关闭:

    bin文件夹下 打开shutdown.bat 关闭tomcat

  配置端口号:
    在server.xml中配置<Connector port="配置端口号" ..../>
  配置外部应用:
    1、在server.xml中配置在<Host .....></Host>中加入
      <Context path="文件夹名称" docbase="路径" />
    2、conf/cataline/localhost 下创建一个xml文件,并录入:
      <Context docBase="路径" />
  映射虚拟主机:
    1、修改端口号为80
    2、修改hosts文件,添加对象的绑定关系
      路径c:\WINDOWS\system32\drivers\etc
    3、在server.xml文件中添加一个<Host>

URI、URL、URN:

  URI:统一资源标识符

  URL:统一资源定位符

  URN:统一资源名称

  每个URL都是URI,但不一定每一个URI都是URL。应为URI还包含了一个子类URN,URN命名资源但不指定如何定位资源。

URL类:

//常用方法boolean equals(Object);//URL是否等于另一个对象getAuthority();//获取URL的授权部分Object getContent();//获取URL内容int getDefaultPort();//获取URL关联协议的默认端口号getFile();//获取URL的文件名getHost();//获取URL的主机名getPath();//获取URL的路径部分int getPort();//获取URL的端口号getProtocol();//获取URL的协议名称getQuery();//获取URL的查询部分(参数信息)getRef();//获取URL的锚点URLConnection openConnection();//打开连接

 

转载于:https://www.cnblogs.com/zltao/p/10041978.html

你可能感兴趣的文章
约瑟夫环问题
查看>>
yum
查看>>
c++指针存储应用程序和释放内存的问题
查看>>
LPC43xx SGPIO Slice 示意图
查看>>
NUMA的取舍与优化设置
查看>>
Swift - 使用UISearchController实现带搜索栏的表格
查看>>
web接口测试之GET与POST请求
查看>>
关于LR中的EXTRARES
查看>>
转:如何转换Android打包用jks格式keystore证书为Air用pkcs12格式p12证书
查看>>
光伏发电系列:关于光伏发电站的建设成本和资金回收周期
查看>>
Linux内核源代码目录树结构
查看>>
js常用正则表达式
查看>>
jQuery-1.9.1源码分析系列(七) 钩子(hooks)机制及浏览器兼容续
查看>>
P - A + B(第二季水)
查看>>
Atitit. 真正的全中国文字attilax易语言的特点以及范例
查看>>
iOS开发--AVFoundation自定义相机
查看>>
阅读GIC-500 Technical Reference Manual笔记
查看>>
JavaWeb学习总结(二) Servlet
查看>>
各类注解笔记:
查看>>
【Python】存储数据
查看>>