网络编程的开始(猫娘和汪君的凄美爱情故事)

现在让我们(快乐的)来学习java中的网络编程

(猫娘和汪君在最后)
一、认识InetAddress
1.首先通过查阅API帮助文档在这里插入图片描述
我们知道,InetAddress是net包下的一个类,表示互联网协议(IP)地址。
2.然后我们往下查看它的常用方法
在这里插入图片描述
对于一个方法,阅读的时候要注意,功能、需要我们提供给方法的值的类型、返回值的类型,大体了解后继续往下走。
3.接下来我们通过一段代码来学习InetAddress

package 网络编程;import java.net.InetAddress;
import java.net.UnknownHostException;public class InetAddressTest {public static void main(String[] args) throws UnknownHostException {InetAddress[] ips = InetAddress.getAllByName("www.baidu.com");for(InetAddress ip:ips) {System.out.println(ip);}//ips作为百度的ip地址的集合,用for循环输出System.out.println("==============");InetAddress ip = InetAddress.getByName("localhost");//返回本机ipSystem.out.println(ip);System.out.println("==============");InetAddress ip2 = InetAddress.getLocalHost();//同样是返回本机ipSystem.out.println(ip2);System.out.println(ip2.getHostName());//输出本机名}}
运行结果为:

www.baidu.com/119.75.217.109
www.baidu.com/119.75.217.26
==============
localhost/127.0.0.1
==============
DESKTOP-BN6OHT3

二、URL的学习

1.查阅帮助文档在这里插入图片描述
URL是net包下的一个类,URL的中文名是统一资源定位符,外文名是Uniform Resource Locator,具体可分成几个部分:
(1)协议
(2)文件所在的服务器的名称或IP地址,后面是到达这个文件的路径和文件本身的名称。

2.查看常用构造方法和常用方法

在这里插入图片描述
3.然后通过一个代码来实践里面提到的方法

package 网络编程;import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;public class URLTest {public static void main(String[] args) throws IOException {URL url = new URL("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=URL&rsv_pq=ecf631580002d369&rsv_t=c3e1xfOEvgtYFqWVscp62vOHgsWPJkqOCcx4upAeKgEpmAUoFaYG4e3itMI&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_n=2");//输出url的协议名System.out.println("1  "+url.getProtocol());//输出此url的主机名System.out.println("2  "+url.getHost());//输出url端口号(注:访问客户端端口号时只会返回0和-1System.out.println("3  "+url.getPort());//获取与此 URL 关联协议的默认端口号。System.out.println("4  "+url.getDefaultPort());//输出url的路径部分System.out.println("5  "+url.getPath());//输出url的查询部分System.out.println("6  "+url.getQuery());//输出此url的文件名(也就是路径和查询的合体)System.out.println("7  "+url.getFile());System.out.println("================================");//打开到此 URL 的连接并返回一个用于从该连接读入的输入流InputStream is = url.openStream();FileWriter fw = new FileWriter("d:/lin/god.txt");//BufferedReader类能从字符输入流中读取文本,缓冲各个字符,实现高效读取BufferedReader br = new BufferedReader(new InputStreamReader(is));String line = null;while((line=br.readLine())!=null) {fw.write(line);fw.write("\n");}br.close();is.close();fw.close();}}输出结果为:
1  https
2  www.baidu.com
3  -1
4  443
5  /s
6  ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=URL&rsv_pq=ecf631580002d369&rsv_t=c3e1xfOEvgtYFqWVscp62vOHgsWPJkqOCcx4upAeKgEpmAUoFaYG4e3itMI&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_n=2
7  /s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=URL&rsv_pq=ecf631580002d369&rsv_t=c3e1xfOEvgtYFqWVscp62vOHgsWPJkqOCcx4upAeKgEpmAUoFaYG4e3itMI&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_n=2
================================
下面的是将信息读取到了一个txt文档中,在此不显示,当然也可以直接的添加到一个空的.html文档中,只要改变编码模式,能基本复原原网页框架。

三、TCP和UDP协议特点
1.TCP–就像打电话,可靠传输
2.UDP协议–就像写信,寄邮件,不能保证可靠传输,但是速度快。

1.1 小狗服务器,TCPServer
打电话当然要两方通话啦,所以有服务器,和客户端,首先是服务器的代码和运行结果,两者是相通的

package TCP;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TCPserve {public static void main(String[] args) {try {ServerSocket ss = new ServerSocket(8888);//创建绑定到制定端口的服务器套接字while(true) {//意为接受多个客户端发出的信息//第一环节Socket socket = ss.accept();//等待客户端应答System.out.println("服务器:");System.out.println(socket);//第二环节,接受客户端的问候,并显示System.out.println("----------------");InputStream iss = socket.getInputStream();byte[] bytes = new byte[10];String str = null;int len = 0;while((len = iss.read(bytes)) != -1) {str = new String(bytes, 0, len);System.out.println(str);}System.out.println("服务器: get it!!");//第三环节,互动环节,向客户端示好System.out.println("---------------");OutputStream os = socket.getOutputStream();os.write("服务器:woof!".getBytes());socket.shutdownInput();System.out.println("服务器:reply!");//将输出输出流关闭,套接字关闭iss.close();os.close();socket.close();//当接收到end时,表示不再接收数据,关闭服务器if(str.equals("end"))break;}ss.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}	}
}输出:服务器:
Socket[addr=/192.168.1.106,port=63828,localport=8888]
----------------
client:meow!
服务器: get it!!
---------------
服务器:reply!

1.2 小猫客户端,TCPClient

package TCP;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;public class TCPClient {public static void main(String[] args) {try {Socket socket = new Socket(InetAddress.getLocalHost(),8888);//创建一个流套接字并将其链接到指定IP地址的指定端口号//第一阶段System.out.println("客户:");System.out.println(socket);//第二阶段,從客戶端发送,服務端輸出System.out.println("---------------");OutputStream os = socket.getOutputStream();os.write("client:meow!".getBytes());socket.shutdownOutput();//此套接字的输入流位于“流的末尾”System.out.println("客户端:send!");//第三阶段System.out.println("---------------");InputStream is = socket.getInputStream();byte[] b = new byte[1024];int len = 0;String str = null;while((len = is.read(b)) != -1) {str = new String(b,0,len);System.out.println(str);}System.out.println("客户端: get it!");is.close();os.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}输出:客户:
Socket[addr=DESKTOP-BN6OHT3/192.168.1.106,port=8888,localport=63828]
---------------
客户端:send!
---------------
服务器:woof!
客户端: get it!

两个代码想要干什么呢,
首先把小猫在猫窝打电话,小猫说,这里是“猫窝”,我打的是“xxxx”这个号码,我是“xxxxx”这个号码,
小狗在狗窝接电话,也是如此。
然后大概就是小猫对小狗meow了一声之后,小狗收到后,反过来对小猫woof了一声。

2、最后要讲的是猫娘和汪君的凄美爱情故事
故事发生在南北朝时期,汪君为国攻城略地,雄姿英发,猫娘嫁与汪君后独守空房五载,只能够通过DatagramSocket(数据报套接字),也就是驿站,来传达心意。他们用的信封是Datagrampocket牌的信封。

2.1 地点有两个:一个是汪君所在的9996战场

package TCP;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;public class UDPServer {public static void main(String[] args) {try {//数据报套接字,是包投递服务的发送或接收点,相当于邮局的作用//此构造方法相当于将数据报套接字绑定到本机的9996端口DatagramSocket ds = new DatagramSocket(9996);byte[] data = new byte[1024];DatagramPacket dp = new DatagramPacket(data,data.length);ds.receive(dp);byte[] data2 = dp.getData();int length = dp.getLength();InetAddress ip = dp.getAddress();int port = dp.getPort();String str = new String(data2,0,length);System.out.println("猫娘来信中写道:"+str);System.out.println("汪君含泪喃喃自语道:"+"DogServer:吾闻矣,五岳无棱不负卿!");System.out.println("------------------");//随即汪君给猫娘回信System.out.println("汪君写了一封信给猫娘");byte[] reply = "欲以深情,与卿白头,然匈奴未灭,不敢家为!".getBytes();DatagramPacket dgp = new DatagramPacket(reply,reply.length,InetAddress.getLocalHost(),9977);ds.send(dgp);System.out.println("交给信使,信使从服务器出发了");ds.close();} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}输出结果为:猫娘来信中写道:meow~meow~
汪君含泪喃喃自语道:DogServer:吾闻矣,五岳无棱不负卿!
------------------
汪君写了一封信给猫娘
交给信使,信使从服务器出发了

2.2 另一方是远在天边的9977深闺

package TCP;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;public class UDPClient {public static void main(String[] args) {try {DatagramSocket ds = new DatagramSocket(9977);//系统自动分配//客户端向服务器通信,相当于写信byte[] buf = "meow~meow~".getBytes();//此类表示数据报包,相当于一封信,信的内容、长度,将要邮往的地址和门牌号DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 9996);ds.send(dp);System.out.println("CatClient:君不见,妾托信使寄相思?");System.out.println("----------------");//猫娘收到回信//感觉这就是固定的收信格式,就当做猫娘不忍看汪君征战沙场的地方,只看信的内容和长度吧byte[] reply = new byte[1024];DatagramPacket dgp = new DatagramPacket(reply,reply.length);ds.receive(dgp);String str = new String(dgp.getData(),0,dgp.getData().length);System.out.println("汪君回信: "+str);System.out.println("猫娘:自古妾身与夫君,人间不许见白头;定当壮君鸿鹄志,小窗幽院空自愁。");ds.close();} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}输出结果为:
CatClient:君不见,妾托信使寄相思?
----------------
汪君回信: 欲以深情,与卿白头,然匈奴未灭,不敢家为!
猫娘:自古妾身与夫君,人间不许见白头;定当壮君鸿鹄志,小窗幽院空自愁。

这就是目前学到的所有的网络编程的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26583.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT 领导者揭示了对 ChatGPT 的网络恐惧

根据黑莓的最新研究,大多数(51%)安全领导者预计ChatGPT将在一年内成为成功的网络攻击的核心。 对北美、英国和澳大利亚的1500名IT决策者的调查还发现,71%的人认为民族国家可能已经将该技术用于针对其他国家的恶意目的。 ChatGPT是由OpenAI开发的人工…

一群中国芯片技术小球的奋斗故事系列:“中科融合的AI-3D芯片追赶美国德州仪器DLP技术之产业和技术初探-part III”

引子 2023年初春,冬雪未化,ChatGPT和GPT4一声惊雷,以颠覆的表现震惊全球,被称之为AI的“iPhone时刻”。微软全线产品迅速导入,生产力工具与搜索,经过了30年,再次分久必合!全世界人民…

干货!来自北大、KAUST、斯坦福、达摩院的大模型前沿动态:表格推理、代码生成、MiniGPT-4、生成式推理...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! ChatGPT的发布使得国内外众多的研究机构掀起了一股AI热潮,而这也进一步推动了人们对大语言模型的深入研究。2023年4月26日,AI TIME举办的大模型专场四活动邀请了阿里巴巴达摩院NLP研究员…

5月25日活动报名 | 与五位来自AI产业和开发者工具服务领域的大咖一起思辨代码自动生成...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 10年内AI会淘汰程序员这个职业么? AI技术的发展已经给我们带来了很多的变化,尤其是在计算机编程领域,基于大模型能力的代码生成工具在这1年来得到了越来越多的关注&#xff0…

永远年轻,永远在路上的AI TIME

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 在2019年的智源人工智能大会上,我第一次接触AI TIME,时至今日,加入AI TIME已经四年了。在过去的四年里,AI技术、产业发生了翻天覆地的变化,我自己的思…

除了AIGC,2023年还要面临哪些技术“双刃剑”?

最近两个月,人们惊叹于AIGC的“超能力”,但也对AIGC带来的潜在风险表示担忧。ChatGPT之父Sam Altman在最近的一次访谈中表示,AI在为人类的聪明才智提供力量倍增器的同时,也可能带来技术滥用、事故等安全风险。他重点指出「恶意人员…

生成式AI火爆全球,你是否已经做好了准备?

2023年,随着ChatGPT的火爆全球,生成式AI也引发了各界人士的广泛关注。一时间,从国际科技巨头到国内人工智能企业,几乎所有我们耳熟能详的科技公司,都纷纷杀入了生成式AI市场。 作为全球云计算技术的开创者和领导者&…

面对AI“龙卷风”破坏力 白宫“软着陆”欧盟“硬防御”

ChatGPT的风靡与风险将OpenAI的CEO山姆奥特曼(Sam Altman)送进白宫,他被蹲守在美国总统府邸的记者们围追,面对5月4日白宫发起的AI风险治理会议,奥特曼很官方地给出“重要也很及时”的回应,自信的反复强调“…

QQGC?揭秘QQ的AI绘画大模型技术

👉腾小云导读 2022年来,AIGC概念迅速出圈并快速形成产业生态,成为继PGC、UGC之后新的数字内容创作形式。QQ影像中心提出了自研的AI画画技术方案——QQGC,本文将介绍在QQGC基础大模型训练中的实践和探索,接着往下看吧~ …

Worldcoin,大众的加密货币还是个人的数字身份?

2022年8月,在印度班加罗尔一间大学的教室里,摩西•阿莫得(Moiz Ahmed)举起一个排球大小、中间有一个玻璃开口的铬合金球。阿莫得向学生们解释说,如果用这个叫做“Orb”的设备扫描他们的虹膜,他们将获得25个…

UML统一建模语言(UML类图)

UML统一建模语言 UMLUML类图类图的作用类的表示方法 类与类之间关系的表示方式关联关系单向关联双向关联自关联 聚合关系组合关系依赖关系继承关系(泛化关系)实现关系 UML 统一建模语言(Unified Modeling Language,UML)是用来设计…

用StartUML生成GoF设计模式类图与代码(c++)

先介绍一下startUML StarUML(http://www.staruml.com)的前身是Plastic,从1996年开始开发。1998年开始,Plastic转变为UML建模工具。2005年改名为StarUML,最新版本StarUML 5.0已经是一款功能全面的产品,支持…

详解GMM高斯混合模型EM模型

一般讲到GMM就会讲到EM。 我不过多的介绍EM算法。这里只是举一些例子来看看真实的GMM怎么用EM算的。 一、GMM的作用 记住GMM的作用,就是聚类! 二、GMM有hard和soft两种 hard-GMM和soft-GMM是为了对标k-means和soft k-means。在中文互联网上搜索到的GM…

UML建模及starUML使用

1、UML关系 1.1 六种关系图例 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation)&#x…

统一建模语言UML(四):领域模型和类图

统一建模语言UML(四):领域模型和类图 领域模型 领域模型是对领域内概念类或现实世界中对象的可视化表示,也称为概念模型。是更为完整的业务模型的一个特例。从UML的表示法角度,领域模型被描述为一组没有定义操作的类图…

EA建模工具,介绍常用的UML图

[导读] 作为程序猿都最好掌握的一门语言,那就是UML(Unified Modeling Language),统一建模语言(UML)是软件工程领域中一种通用的开发建模语言,旨在提供一种可视化系统设计的标准方法。是开发人员、系统设计人员交流的有…

UML建模语言中的活动图

实验目的 通过上机实验,掌握活动图的语法和规则,深入理解活动图的概念 实验环境 Window下安装StarUML 实验内容 介绍活动图的基本语法与规则(可以用图形表述): 活动图是在流程图的基础上添加了大量软件工程术语的…

使用语雀绘制 Java 中六大 UML 类图

目录 下载语雀 泛化关系(Generalization) 实现关系(Realization) 关联关系(Association) 依赖关系(Dependency) 聚合关系(Aggregation) 组合关系&…

[精华] UML (统一建模语言) 各种图总结

UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。下面将对UML的九种图包图的基本概念进行介绍以及各个图的使用场景。 一、基本概念   如下图所示,UML…

迅速掌握统一建模语言UML图

统一建模语言 是非专利的第三代建模和规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面&…