| 
 
| 今天学习了网络编程,很有意思,因为写代码再也不是一个人玩了,可以跟同桌甚至是全班的人一起玩,实现数据传输,上午跟同桌,把案例改吧改吧,增强了点,能跟同桌一句一句的通话了,晚上又把源拓展的上传日志案例改了一下,可以实现多文件的传输了,总体来说还是很有收获的! 网络编程
 一、概述
 网络TCP/IP协议层次结构
 a:链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
 b:网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
 c:传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
 d:应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。
 IP地址:IPV4和IPV6
 0.0.0.0 ----->255.255.255.255
 32位 (2进制,10进制)
 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000
 FFFF : FFFF : FFFF : FFFF : FFFF : FFFF : FFFF : FFFF
 128位(2进制,16进制)
 IPV4:最大主机数 2的32次方 -1;并不是所有的地址都会被分配,人均入网设备变多,随着社会发展,已不能满足,IPv4地址正在耗尽,而IPv6通过更长的序列提供了更多的IP地址。IPv4向IPv6的迁移正在发生
 IPV6:最大主机数 2的128次方 - 1;
 InetAddress :该类用于封装一个IP地址,并提供了一系列与IP地址相关的方法
 a:static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
 b:static InetAddress getLocalHost() 返回本地主机。
 c:String getHostAddress()  返回 IP 地址字符串(以文本表现形式)。
 d: String getHostName() 获取此 IP 地址的主机名。
 二、网络编程数据传输(传输层)
 A:UDP
 无连接,效率高,安全性低
 
 B:TCP
 面向连接,效率低,安全性高
 Client:
 //创建客户端对象
 Socket s = new Socket("127.0.0.1", 10086);
 //创建流对象
 FileInputStream fis = new FileInputStream("a.txt");
 OutputStream os = s.getOutputStream();
 
 //读写
 int len;
 byte[] bys = new byte[1024];
 while((len=fis.read(bys)) !=-1){
 os.write(bys, 0, len);
 }
 //写完后,跟服务器结束标记
 s.shutdownOutput();
 fis.close();
 //读取服务器回执消息
 InputStream is = s.getInputStream();
 byte[] bbs = new byte[1024];
 int len2 = is.read(bbs);
 System.out.println(new String(bbs,0,len2));
 s.close();
 
 Serive:
 ServerSocket ss = new ServerSocket(10086);
 
 while(true){
 final Socket s = ss.accept();
 //多线程
 new Thread(){
 public void run() {
 try {
 //流对象
 InputStream is = s.getInputStream();
 FileOutputStream fos = new FileOutputStream("b"+System.currentTimeMillis()+".txt");
 
 //接收,写
 int len;
 byte[] bys = new byte[1024];
 
 while((len=is.read(bys)) != -1){
 fos.write(bys, 0, len);
 }
 fos.close();
 //上传成功
 OutputStream os = s.getOutputStream();
 os.write("上传成功".getBytes());
 s.close();
 }  catch (IOException e) {
 System.out.println("网络繁忙,请稍后再试!");
 e.printStackTrace();
 }
 };
 }.start();
 }
 
 
 | 
 |