p653-674
坦克大战
继续上回游戏
将每个敌人的信息,恢复成Node对象,放进Vector里面。
播放音乐
使用一个播放音乐的类。
第二阶段结束了
网络编程
相关概念
(权当是复习计网了)
网络
1.概念:两台或多台设备通过一定物理设备连接起来构成了网络
2.根据网络的覆盖范围不同,对网络进行分类:
局域网:覆盖范围最小,仅仅覆盖一个教室或一个机房
城域网:覆盖范围较大,可以覆盖一个城市
广域网:覆盖范围最大,可以覆盖全国,甚至全球,万维网是广域网的代表
.·ip地址
1.概念:用于唯一标识网络中的每台计算机/主机2.查看ip地址: ipconfig
3. ip地址的表示形式:点分十进制Xx.XX.XX.XX4.每一个十进制数的范围:0~255
5. ip地址的组成=网络地址+主机地址,比如:192.168.16.69
6. iPv6是互联网工程任务组设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址。
7.由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联的障碍
·域名
1.www.baidu.com
2.好处:为了方便记忆,解决记ip的困难3.概念:将ip地址映射成名
·端口号
·1.概念:用于标识计算机上某个特定的网络程序
2表示形式:以整数形式,范围0~65535
3.0~1024已经被占用,比如 ssh 22, ftp 21, smtp 25 ,http 804.
在网络开发中,不要使用0-1024,因为它们往往被知名程序占用了!
常见的网络程序端口号:
tomcat :8080mysql:3306
oracle:1521
sqlserver:1433
网络通信协议协议(tcp/ip)
TCP/IP (Transmission Control
Protocol/lnternet Protocol)的简写,
●中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。
·TCP和UDP
TCP协议:
1.使用TCP协议前,须先建立TCP连接,形成传输数据通道
2传输前,采用"三次握手"方式,是可靠的
在吗?
在
我要说事了...
3.TCP协议进行通信的两个应用进程:客户端、服务端
4.在连接中可进行大数据量的传输
5.传输完毕,需释放已建立的连接,效率低
UDP协议:
1.将数据、源、目的封装成数据包,不需要建立连接
2.每个数据报的大小限制在64K内,不适合传输大量数据
3.因无需连接,故是不可靠的
4、发送数据结束时无需释放资源(因为不是面向连接的),速度快
5.举例:厕所通知:发短信
InetAddress类
相关方法
1.获取本机InetAddress对象getLocalHost
2.根据指定主机名/域名获取ip地址对象getByName
3.获取InetAddress对象的主机名getHostName
4.获取InetAddress对象的地址getHostAddress
//获取本机对象
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);
//根据指定主机名,获取InetAddress对象
InetAddress host1 = InetAddress.getByName("DESKTOP-2OATAMU");//我想加入老韩的电脑名该怎么操作呢?
System.out.println(host1);
//根据域名返回InetAddress对象
InetAddress host2 = InetAddress.getByName("www.baidu.com");
System.out.println(host2);
//通过InetAddress对象,获取对应的地址
String hostAdd = host2.getHostAddress();
System.out.println(hostAdd);
//通过InetAddress对象,获取对应的主机名或域名
String hostName = host2.getCanonicalHostName();
System.out.println(hostName);
Socket(插座?)
1.套接字(Socket)开发网络应用程序被广泛采用,以至于成为事实上的标准。
2.通信的两端都要有Socket,是两台机器间通信的端点
3.网络通信其实就是Socket间的通信。
4.Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输
5.一般主动发起通信的应用程序属客户端,等待通信请求的为服务端
Socket用到TCP和UDP都可以。
TCP网络通信编程
●基本介绍
1.基于客户端―服务端的网络通信
2.底层使用的是TCP/IP协议
3.应用场景举例:客户端发送数据,服务端接受并显示控制台
4.基于Socket的TCP编程
例:
服务端:
package com.day33; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * @author 马大可 * @version 1.0 * 服务端! */ public class Sock { public static void main(String[] args) throws IOException { //表示在本机的999端口监听,要求本机没有其他服务在监听9999 ServerSocket serverSocket = new ServerSocket(9999); System.out.println("服务端在9999端口监听,等待连接"); //当没有客户端连接9999端口时,则阻塞,等待连接。 //如果有客户端连接,则会返回Socket对象,程序继续。 Socket socket = serverSocket.accept(); System.out.println("服务端 socket="+socket.getClass()); InputStream inputStream = socket.getInputStream(); byte[] buf = new byte[1024]; int readlen = 0; while ((readlen=inputStream.read(buf))!=-1){ System.out.println(new String(buf,0,readlen)); } //让服务端回信 OutputStream outputStream = socket.getOutputStream(); outputStream.write("hello,我是服务端".getBytes()); //输出write结束的标记:我说完了,你可以说了 socket.shutdownOutput(); inputStream.close(); outputStream.close(); socket.close(); System.out.println("服务端任务完成!"); } }
客户端:
package com.day33; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; /** * @author 马大可 * @version 1.0 * 客户端 */ public class Sock_c { public static void main(String[] args) throws IOException { //连接服务端(也就是本机)9999的端口 Socket socket = new Socket(InetAddress.getLocalHost(),9999); //如果连接成功,返回Socket对象 System.out.println("客户端 socket= "+socket.getClass()); //得到和socket对象关联的输出流对象 OutputStream outputStream = socket.getOutputStream(); outputStream.write("hello!我是客户".getBytes()); //输出write结束的标记(我说完了,你可以说了 socket.shutdownOutput(); InputStream inputStream = socket.getInputStream(); byte[] buf = new byte[1024]; int readlen = 0; while ((readlen=inputStream.read(buf))!=-1){ System.out.println(new String(buf,0,readlen)); } //关闭流和socket outputStream.close(); socket.close(); System.out.println("客户端已完成任务"); } }
这是字节流的方式,还可以换成字符流来发送纯文本
网络上传文件
也就是说,把客户端的图片通过网络上传到服务器,服务器回复消息。
自己配合gpt成功了(哈哈,AI早日战胜我)
服务端:
客户端
客户端展示图片的方法: