美文网首页
互联网程序设计课程记录

互联网程序设计课程记录

作者: Gaking_ | 来源:发表于2019-09-25 08:36 被阅读0次

    刚选到这门课的时候写道:Java没学好的我一定会很痛苦的。

    20191016写道:以前java学的很烂本来以为这门课学起来会很费劲的,所以每节课都会先自己做一遍程序,然后心里就对每节课要讲的有了大致的概念,上课听讲就有了针对性和目的。刚开始会去琢磨每行代码的含义,很费时间然后还是不懂,后来发现其实不用这样,很多代码都是成块出现的,理解那一段的含义就可以搬过来用了,可能大佬每行都看得懂记得住,但起码我用这种理解方法去学习更容易接受。老师每节课开始会介绍概念,偶尔写一段简单代码分析一下,对我理解后面的代码很有帮助。大家都说互联网这课难,我觉得难度尚可,还挺有意思的,喜欢这门课。

    20190828第1讲 JAVA图形窗口程序设计

    一、在指定的区域录入信息,到指定的区域显示该信息。

    加了框内回车键的功能。

    alt键同上,但为啥参数变成null了。《Java语言程序基础设计(第10版)》p505-507

    经检验,其实定义回车键动作的evt可以换成null

    dan

    二、将聊天信息同步保存到磁盘文件。

    看着就头大

    忘了啥是输入输出流,不过反正学的时候就没咋搞懂

    https://www.cnblogs.com/fwnboke/p/8529492.html

    public class FileWrite {

       private PrintWriter pw=null;

       public FileWrite(){//定义构造方法

         //使用SAVE AS文件对话框命名文件.

        /*   JFileChooser jfc=new JFileChooser();

        jfc.setCurrentDirectory(new File("E:\\javaApp\\ch01\\"));

        jfc.showSaveDialog(null);

        File fileName=jfc.getSelectedFile();*/

        //或直接指定文件名及保存位置.   

         File fileName=new File("E:\\javaApp\\ch01\\talk1.txt");

        try {

             //新建并打开一个输出文件.  

            FileOutputStream fw=new FileOutputStream(fileName,true);

            pw=new PrintWriter(fw);//装饰成字符型输出流.

         } catch (FileNotFoundException ex) { }

       }

    三、程序设计进阶之一:文字编辑工具软件

    20190904第2讲 网络对话程序设计

    学习字节流和字符流,参见论文

    字节流->字符流->PrintWriter/BufferedReader

    一、TCPClient.java

    Socket socket = new Socket( String host,int port);向服务器端口发送tcp连接

    Socket.getInputStream()方法可获得输入字节流的入口地址;字节流

    Socket.getOutputStream()方法可获得输出字节流的出口地址;字节流

    PrintWriter pw = socket字节流转字符流

    BufferedReader br = socket字节流转字符流

    send(String msg)  pw.println(msg); //写入网卡输出流,由系统调用底层函数,经网卡发送。

    receive() msg = br.readLine();//接收一行信息,阻塞语句。

    二、TCPClientJFrame

    点击连接,getText取ip和端口号,string和int转换

    tcp=new TCPClient(ip,port);//发起TCP连接

    发送,getText()取出聊天信息msg1,tcp.send(msg1);//发送一串字符。

    接收,msg2=tcp.receive(); //接收一行字符串,jTextArea1.append(msg2); //显示接收到的信息

    socket.close();//实现四次握手断开.

    简单的快乐。

    20190911第3讲 多线程程序设计

    各种编码方式https://blog.csdn.net/wskzgz/article/details/88710263

    套接字

    readline()阻塞语句

    tcp套接字

    服务器 开启监听端口

    客户机

    客户端的线程程序设计

    调用start()时开启线程,当该线程获取执行资源后就开始执行run方法;就是多线程会竞争资源,谁获得资源谁就执行,就是运行run方法

    发送作为主程序,接收作为线程

    多用户服务器程序设计

    打开服务器端口

    创建线程池,定义每个线程和客户对接的方法功能

    监听客户请求,每收到一个请求就分配一个线程给用户

    显示来访者信息,显示来访者发送的消息

    pw.println显示在界面上

    system.out.println显示在控制台上

    20190918第4讲 网络文件传送程序设计

    用2021端口实现对话服务,如身份验证、文件目录信息浏览等,用2020端口传递数据文件(即文件上传下载)。

    客户端程序有:

      主界面客户端程序FileClientJFrame.java;

      新增下载按钮,将输入区文件名放入变量调用fileget方法进行下载

      文件对话客户端程序(控制进程)FileDialogClient.java;

    和TCPClient.java大致相同

      文件数据客户端程序(数据传输进程)FileDataClient.java。

      fileget方法 包括:文件保存对话框;发送请求的文件名,字符串读写功能;接收服务器的文件,字节读写功能;文件传输完毕,关闭数据套接字。

     服务端程序:

     文件对话服务器程序FileDialogServer.java,开启2021端口;

      主要功能:身份验证、文件目录传送。

     文件数据服务器程序FileDataServer.java,开启2020端口。

    主要功能:根据请求的文件名传送文件,接收文件。

    20190925第5讲 UDP套接字程序设计

    UDP通信特点:

       (1) UDP有别于TCP,有自己独立的套接字(IP+PORT),它们和TCP的端口号不冲突;

       (2) UDP通信前通常[不]需要连接;

       (3)UDP基于用户数据报文(包)读写,TCP基于字节流的读写;

       (4) UDP通信一般用于线路质量好的环境,如园区网内。

       (5) 几个关键的Java类:DatagramSocket,DatagramPacket,MulticastSocket。

    UDPClient.java

    定义UDP套接字绑定,send,receive,close方法

    UDP套接字类: DatagramSocket

    TCP通信有客户套接字Socket和服务器套接字ServerSocket两种,而UDP套接字只有一种DatagramSocket,不区分客户套接字和服务器套接字。

    发送网络数据用:DatagramSocket.send(packet);//发送一个数据报文

    接收网络数据用:DatagramSocket.receiver(packet);//接收一个数据报文

    UDP数据报文类:DatagramPacket

    UDP发送数据是基于报文DatagramPacket,网络中要传递的数据都要封装在报文中。

    Byte[] b=DatagramPacket.getData();//从数据报文中取出字节数据

    DatagramPacket.setData(Byte[] b); //往数据报文中填充字节数据

    TCP中socket表示一个连接,UDP中socket表示一个绑定

    TCP字节流->字符流->PrintWriter/BufferedReader

    UDP字节流->数据报文

    UDPClientJFrame.java

    和前面tcp的没啥差别

    UDPServer.java

    DatagramSocket socket=new DatagramSocket(6006);

    DatagramPacket packet=new DatagramPacket(new byte[1024],1024); //create a new packet

    socket.receive(packet);// receive the data from client         

    String msg=new String(packet.getData(),0,packet.getLength(),"GB2312");

    向客户端发送数据String->String.getByte("GB2312")->packet.setData(String.getByte("GB2312"))->socket.send(packet)


    20191009第6讲邮件发送程序设计

    邮件传输协议包括SMTP(简单邮件传输协议,RFC821)及其扩充协议MIME;

    邮件接收协议包括POP3和功能更强大的IMAP协议。

    简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP)是在Internet传输email事实标准。SMTP是一个相对简单的基于文本协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange)DNS

    MIME,全称为“MultipurposeInternetMailExtensions”,比较确切的中文名称为“多用途互联网邮件扩展”。它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC2045-2049(注意RFC1521和RFC1522是它的过时版本)。MIME试图在不改变SMTP协议和RFC822(邮件格式标准)的基础上,使得邮件可以传送任意二进制文件。

    POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或 MAC。一旦邮件发送到 PC 机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。

    IMAP(Internet Mail Access Protocol)以前称作交互邮件访问协议(Interactive Mail Access Protocol),是一个应用层协议。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。

     服务邮件发送的服务器其端口为25,服务邮件接收的服务器其端口为110。

     邮件客户端软件通过邮件服务器的25号端口发送邮件,通过邮件服务器的110端口读取其中的邮件。

    20191016第7讲HTTP程序设计


    基于TCPSocket套接字的网页下载程序设计

    HTTPClient.java
    HTTPClientJFrame.java

    在“网页请求”按钮中发送HTTP请求头标准格式(关于HTTP请求头的更多信息可查阅RFC1945文档)。

    HTTP的头格式如下(具体见例子程序):

     GET / HTTP/1.1;//访问默认网页,注意第一个‘/’前后要留有空格

    //若知道网页名,可使用访问指定网页的形式:

    GET /index.jsp HTTP/1.1;

    Host:"+address+";//address指服务器的IP或域名

    Accept: */*;

    Accept-Language: zh-cn;

    Accept-Encoding: gzip, deflate;

    User-Agent: Mozilla/4.0(compatible; MSIE 6.0; Windows XP);

    Connection: Keep-Alive;

    //最后要多发送一空行。

    将上述的HTTP头格式构成一个字符串(通常用StringBuffer类),一致发送到HTTP服务器。

    String、StringBuffer、StringBuilder有什么区别

    String与StringBuffer之间的转换

    https网页请求技术

    HTTPS是安全的HTTP通道,在HTTP通信中加入了SSL层,通信的数据被加密了,防止被窃取。HTTPS使用的加密方式结合了对称加密和不对称加密的特点,在保证安全的情况下,又提高了传输效率。

    20191023第8讲网络扫描程序设计

    20191030第9讲网络抓包与发包程序设计 上

    基于TCP Socket的网络应用(网络聊天、FTP、Email及HTTP),以及基于UDPSocket的网络聊天应用中,网卡只往网络层传递与自己IP地址一致的单播包。

    抓包的思想是:流经网卡所有的有效包(共6种有效包,见《计算机网络》的链路层)都要抓,所以抓包程序都是工作在链路层或网络层(不考虑应用层的端口参数问题)。

    安装WinPcap和jpcap

    。。。往11.1版本的NetBeans添加库jpcap.jar加了一上午,我太垃圾了,主要是网上都没有解决方案啊啊

    右键项目-property-build-compile-Manage Java Platforms-sources-addJAR,主要是注意把它放到和原来的库一个java文件里面,之前一直从别处添加就不行。。。太难受了

    Jcapturedialog.java

    测试安装和环境配置成功

    NetcaptureJFrame.java

    PacketReceiver packetHandler = new PacketReceiver() // 实例化packetHandler

    在开始按钮里定义三个操作和线程

    NetworkInterface[] devices=JpcapCaptor.getDeviceList();//获得计算机的网络接口设备

    jpcap = JpcapCaptor.openDevice(devices[0],1514,true,60);//实例化一个网络捕获器(一般用默认的第一块网卡)//其中:device参数是网络接口的名字;snaplen参数是一次捕获的最大字节数量;promisc参数,若为true,接口被设置为混杂模式;to_ms参数,设定processPacket()中的Timeout。

    jpcap.setFilter("tcp", true);//设计抓包过滤条件,如:只抓TCP包

    captureThread = new Thread() //定义抓包处理线程

    。。。自己的笔记本抓不出来包,折腾半天,代码放实验室电脑上立马出来一堆,嘛玩意啊

    相关文章

      网友评论

          本文标题:互联网程序设计课程记录

          本文链接:https://www.haomeiwen.com/subject/vmdmectx.html