zoukankan      html  css  js  c++  java
  • 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

    参考资料

  • 相关阅读:
    HDU 2852 KiKi's K-Number (主席树)
    HDU 2089 不要62
    Light oj 1140 How Many Zeroes?
    Bless You Autocorrect!
    HDU 6201 transaction transaction transaction
    HDU1561 The more ,The better (树形背包Dp)
    CodeForces 607B zuma
    POJ 1651 Mulitiplication Puzzle
    CSUOJ 1952 合并石子
    Uva 1599 Ideal path
  • 原文地址:https://www.cnblogs.com/alovera/p/5468097.html
Copyright © 2011-2022 走看看