20145319 第十周学习总结

20145319 《Java程序设计》第十周学习总结

教材学习内容总结

网络编程

  • 定义:网络编程就是在两个或两个以上的设备之间传输数据。

  • 计算机网络概述:

    1. 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。

    2. 网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址。在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成,例如10.0.120.34

    3. 为了方便记忆,有创造了另外一个概念——域名(Domain Name),例如sohu.com等。一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。

    4. 端口(port):在同一个计算机中每个程序对应唯一的端口,这样一个计算机上就可以通过端口区分发送给每个端口的数据了,就是一个计算机上可以并发运行多个网络程序(在硬件上规定,端口的号码必须位于0-65535之间)

  • 网络编程概述:

     1. 网络通讯基于“请求-响应”模型。第一次主动发起通讯的程序被称作客户端而在第一次通讯中等待连接的程序被称作服务器端。
    
     2. 客户端被安装在用户电脑上,服务器端程序运行在公司机房中,为用户提供服务。这种网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构,简称C/S结构。表现力丰富,但通用性差。
    
     3. 没有必要使用专用的客户端,而使用通用的客户端,例如浏览器,这种结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构。开发的压力比较小。但是表现力不强,无法进行系统级操作。
    
  • 网络通讯方式

    1. TCP(传输控制协议)方式

    2. UDP(用户数据报协议)方式

网络编程技术

  • 网络编程步骤

    1. 客户端网络编程

    2. 服务器网络编程

  • 客户端网络编程步骤

    1. 建立网络连接:建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。

    2. 交换数据:由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。

    3. 关闭网络连接:在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。

  • 服务器端网络编程步骤

    1. 监听端口:服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。

    2. 获得连接:当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换。

    3. 交换数据:服务器端通过获得的连接进行数据交换。接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。在数据交换完成以后,关闭和客户端的连接。

    4. 关闭连接:当服务器程序关闭时,需要关闭服务器端,通过关闭服务器端使得服务器监听的端口以及占用的内存可以释放出来,实现了连接的关闭。

Java网络编程技术

  • InetAddress类:该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。

  • Socket类:以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。

    1. 在客户端网络编程中,首先需要建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接,示例如下:

        Socket socket1 = new Socket(“192.168.1.103”,10000);
      
        Socket socket2 = new Socket(“www.sohu.com”,80)
      
    2. 连接一旦建立,紧接着的步骤就是按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可。示例代码如下:

       OutputStream os = socket1.getOutputStream(); //获得输出流
      
       InputStream is = socket1.getInputStream();     //获得输入流
      
    3. 最后当数据交换完成以后,关闭网络连接,释放网络连接占用的系统端口和内存等资源,完成网络操作,示例代码如下:

       socket1.close();
      

教材学习中的问题和解决过程

代码调试中的问题和解决过程

  • 代码:

      package zed;
    
      import java.io.*;
      import java.net.*;
      
      public class SimpleSocketServer {
      	 public static void main(String[] args) {
                 ServerSocket serverSocket = null;
                 Socket socket = null;
                 OutputStream os = null;
                 InputStream is = null;
                 //监听端口号
                 int port = 10000;
                 try {
                          //建立连接
                          serverSocket = new ServerSocket(port);
                          //获得连接
                          socket = serverSocket.accept();
                          //接收客户端发送内容
                          is = socket.getInputStream();
                          byte[] b = new byte[1024];
                          int n = is.read(b);
                          //输出
                          System.out.println("客户端发送内容为:" + new String(b,0,n));
                          //向客户端发送反馈内容
                          os = socket.getOutputStream();
                          os.write(b, 0, n);
                 } catch (Exception e) {
                          e.printStackTrace();
                 }finally{
                          try{
                                   //关闭流和连接
                                   os.close();
                                   is.close();
                                   socket.close();
                                   serverSocket.close();
                          }catch(Exception e){}
                 }
       }
    

    }

  • 运行结果:

  • 看到connect refused,觉得应该是ip或者端口出现了问题,于是修改了端口

至今不知道如何修改才能继续运行。。。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 150/150 1/1 20/20
第二周 200/350 1/2 20/40
第三周 300/650 1/3 20/60
第四周 350/1100 1/4 25/85
第五周 200/1300 1/5 20/105
第六周 200/1500 2/7 25/130
第七周 200/1700 2/9 15/145
第八周 200/1900 2/11 8/153
第九周 180/2080 2/13 8/161
第十周 150/2230 2/15 8/169

参考资料

原文地址:https://www.cnblogs.com/20145319zk/p/5471865.html