• 20145212 《Java程序设计》第10周学习总结


    20145212 《Java程序设计》第10周学习总结

    学习内容总结

    一、Java的网络编程

    • 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。
    • java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。
    • java.net包中提供了两种常见的网络协议的支持:
    • TCP: TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称TCP / IP。
    • UDP: UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。

    二、Socket 编程

    • 套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。
    • 当连接建立时,服务器会创建一个Socket对象。客户端和服务器现在可以通过对Socket对象的写入和读取来进行进行通信。
    • java.net.Socket类代表一个套接字,并且java.net.ServerSocket类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。
    • 以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:
    服务器实例化一个ServerSocket对象,表示通过服务器上的端口通信。
    服务器调用 ServerSocket类 的accept()方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
    服务器正在等待时,一个客户端实例化一个Socket对象,指定服务器名称和端口号来请求连接。
    Socket类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个Socket对象能够与服务器进行通信。
    在服务器端,accept()方法返回服务器上一个新的socket引用,该socket连接到客户端的socket。
    
    • 连接建立后,通过使用I/O流在进行通信。每一个socket都有一个输出流和一个输入流。客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。
    • TCP是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.以下是一些类提供的一套完整的有用的方法来实现sockets。

    教材学习问题

    java.net.SocketException四大异常解决方案

    1. java.net.BindException:Address already in use: JVM_Bind。

    该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。

    2.java.net.SocketException: Connection refused: connect。

    该异常发生在客户端进行 new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。

    3.java.net.SocketException: Socket is closed,

    该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。

    4.java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error)。

    该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。

    本周代码托管截图

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 10/10
    第二周 300/500 1/3 16/26
    第三周 300/800 1/4 18/44
    第四周 300/1100 1/5 18/62
    第五周 250/1350 1/6 14/76
    第六周 400/1750 2/8 14/90
    第七周 300/2050 2/10 10/100
    第八周 300/2350 2/12 10/110
    第九周 300/2650 3/15 10/120
    第十周 300/2950 2/17 10/130

    参考资料

  • 相关阅读:
    设计师必备:来自顶级设计师的建议清单
    Qt 控制线程的顺序执行(使用QWaitCondition,并且线程类的run函数里记得加exec(),使得线程常驻)
    Qt 模拟鼠标点击(QApplication::sendEvent(ui->pushbutton, &event0);)
    利用Qt开发跨平台APP(二)(iOS,使用Qt5.9,很详细,有截图)
    C# RESTful API
    NET架构
    一个宏实现
    初步了解 Netty
    使用Rabbit MQ消息队列
    NET CORE与Spring Boot
  • 原文地址:https://www.cnblogs.com/alovera/p/5468097.html
Copyright © 2020-2023  润新知