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

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

教材学习内容总结

网络编程

网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴。在发送和接收数据时,大部分的程序设计语言都设计了专门的API实现这些功能,程序员只需要调用即可。

网络编程步骤:

1、 建立网络连接 客户端网络编程的第一步都是建立网络连接。在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。 2、 交换数据 连接建立以后,就可以通过这个连接交换数据了。交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。 根据逻辑需要,可以多次交换数据,但是还是必须遵循请求响应模型。 3、 关闭网络连接 在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。

网络通讯方式

网络通讯的方式主要有两种:

            TCP(传输控制协议)方式
            UDP(用户数据报协议)方式

Java网络编程技术

1、和网络编程有关的基本API位于java.net包中,该包中包含了基本的网络编程实现,该包是网络编程的基础。该包中既包含基础的网络编程类,也包含封装后的专门处理WEB相关的处理类。

2、InetAddress类:该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。关于该类的使用,下面通过一个基础的代码示例演示该类的使用。

TCP编程

1、以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。在进行网络编程时,底层网络通讯的细节已经实现了比较高的封装,所以在程序员实际编程时,只需要指定IP地址和端口号码就可以建立连接了。

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

Socket socket1 = new Socket(“192.168.1.103”,10000);
Socket socket2 = new Socket(“www.sohu.com”,80);

网络协议:

1、网络协议是指对于网络中传输的数据格式的规定。对于网络编程初学者来说,没有必要深入了解TCP/IP协议簇,所以对于初学者来说去读大部头的《TCP/IP协议》也不是一件很合适的事情,因为深入了解TCP/IP协议是网络编程提高阶段,也是深入网络编程底层时才需要做的事情。

2、对于一般的网络编程来说,更多的是关心网络上传输的逻辑数据内容,也就是更多的是应用层上的网络协议,所以后续的内容均以实际应用的数据为基础来介绍网络协议的概念。

3、网络协议设计完成以后,在进行网络编程时,就需要根据设计好的协议格式,在程序中进行对应的编码了,客户端程序和服务器端程序需要进行协议处理的代码分别如下。

客户端程序需要完成的处理为:

1、 客户端发送协议格式的生成
2、 服务器端反馈数据格式的解析

服务器端程序需要完成的处理为:
1、 服务器端反馈协议格式的生成
2、 客户端发送协议格式的解析

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

package tcp;
import java.io.*;
import java.net.*;

public class MulSocketClient {
     public static void main(String[] args) {
               Socket socket = null;
               InputStream is = null;
               OutputStream os = null;
               //服务器端IP地址
               String serverIP = "127.0.0.1";
               //服务器端端口号
               int port = 10000;
               //发送内容
               String data[] ={"First","Second","Third"};
               try {
                        //建立连接
                        socket = new Socket(serverIP,port);
                        //初始化流
                        os = socket.getOutputStream();
                        is = socket.getInputStream();
                        byte[] b = new byte[1024];
                        for(int i = 0;i < data.length;i++){
                                 //发送数据
                                 os.write(data[i].getBytes());
                                 //接收数据
                                 int n = is.read(b);
                                 //输出反馈数据
                                 System.out.println("服务器反馈:" + new String(b,0,n));
                        }
               } catch (Exception e) {
                        e.printStackTrace(); //打印异常信息
               }finally{
                        try {
                                 //关闭流和连接
                                 is.close();
                                 os.close();
                                 socket.close();
                        } catch (Exception e2) {}
               }
     }
}

该程序的结果是:

java.net.SocketException: Software caused connection abort: recv failed

            at java.net.SocketInputStream.socketRead0(Native Method)

            at java.net.SocketInputStream.read(SocketInputStream.java:129)

            at java.net.SocketInputStream.read(SocketInputStream.java:90)

            at tcp.MulSocketClient.main(MulSocketClient.java:30)

服务器反馈:First

学习进度

 代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标 5000行 30篇 400小时  
第九周 292 2/2 20

参考资料

•Java学习笔记(第8版)

•《Java学习笔记(第8版)》学习指导

原文地址:https://www.cnblogs.com/bosswsc/p/5472132.html