互联网程序设计课程记录

刚选到这门课的时候写道: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() //定义抓包处理线程

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 1,896评论 0 6
  • 什么是Socket Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程...
    onlyHalfSoul阅读 631评论 0 1
  • 1. 网络编程概述 1.1 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接...
    JackChen1024阅读 990评论 0 3
  • 第一章 引言和网络编程基础知识 1.1 分别简述OSI参考模型和TCP/IP模型,并阐述他们之间的对应关系 1.2...
    V0W阅读 4,924评论 0 9
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,333评论 0 4