好买卖做网站,阿里云卸载wordpress,昆山规划建设局网站,中国菲律宾最新局势目录 一.常见的软件架构、网络编程三要素、IP
二.利用UDP发送与接收数据
三.改聊天室
四.组播案例
五.TCP通信案例 一.常见的软件架构、网络编程三要素、IP 网络编程#xff1a;在网络通信协议下#xff0c;不同的计算机上运行的程序进行的数据传输
在Java中可以使用java…目录 一.常见的软件架构、网络编程三要素、IP
二.利用UDP发送与接收数据
三.改聊天室
四.组播案例
五.TCP通信案例 一.常见的软件架构、网络编程三要素、IP 网络编程在网络通信协议下不同的计算机上运行的程序进行的数据传输
在Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序常见的软件架构BS/CS
1.CS是什么架构
ClientAndServer客户端与服务器本地客户端需要下载安装客户端程序远程还有一个服务端程序
2.BS是什么架构
BrowserAndServer浏览器与服务器只需要一个浏览器用户通过不同的网址访问不同的服务器
3.BS架构的优点与缺点
不需要开发客户端只需要页面与服务端但是如果需要传递的数据过多过大就不适合使用网页了
很多时候都需要保存在本地-这就是客户端的形成画面更加精美4.网络编程三要素有哪些
如果要对对方传输数据
1.确定对方的网络地址IP设备在网络中的地址是唯一标识
2.确定对方的接收数据的软件端口号应用程序在设备中的唯一标识
3.确定网络传输的规则协议数据在网络中的传输规则如UDPTCPhttphttpsftp5.IP的含义与常见的IP类型
Internet Protocol,是互联网协议地址也称IP地址是分配给上网设备的数字标签
常见的IP分为IPv4与IPv66.什么是IPv4地址长度为多少位分为多少组IP在转换的时候有没有负数
Internet Protocol(协议) version4互联网通信协议第四版正式开始使用的就是第四版
采用32位地址长度分为4组每一组1字节每组最大就是255
用点分十进制表示就是192.168.1.66注意IP在转换的时候没有负数
所有IP加起来不到43亿个在2019.11.26这些IP已经被全部分配完毕7.什么是IPv6地址长度为多少为分为多少组一般用什么表示可以如何省略
Internet Protocol version6互联网通信协议第六版
采用128位地址长度分为8组每组两个字节这数量有生之年不可能用的完了
用冒分十六进制表示就是:2001:0DBB:0000:0023:0008:0800:200C:417A
一般省略每一组前面的02001:DBB:0:23:8:200C:417A
如果中间有很多0就可以使用0位压缩表示法FF01:0:0:0:0:0:0:1101-FF01::11018.IPv4的地址分类有哪两种
一类是公网IP万维网使用一类是私有地址局域网使用
私有地址
A类 10.0.0.0 --10.255.255.255
B类 172.16.0.0–172.31.255.255
C类 192.168.0.0–192.168.255.255
比如192.168开头的就是私有地址范围就是192.168.0.0--192.168.255.255专门为组织机构内部使用以此节省IP9.私有地址是公网地址吗
比如在网吧中不是每一台电脑都有一个公网的IP一般是共享同一个公网IP再由路由器给每台电脑分配局域网IP由此节约IP10.特殊IP127.0.0.1也可以是localhost是什么地址
是送回地址也是本地回环地址成为本机IP永远只会寻找当前所在的本机
如果电脑要发送消息假如自己的Ip是192.168.1.100如果发消息给自己这个IP要先发送到路由器再由路由器分配消息
不是每个路由器分配给你的IP是一样的自己给自己发送数据就写127.0.0.111.常见的cmd命令有哪些
ipConfigping(也能检查局域网是否畅通)IP地址类InetAddress
有两个子类一个是IPv4一个是IPv6会自动判断是哪个版本的再去创建其子类对象
12.如何创建IP地址对象
13.如何通过IP对象获取主机名与IP地址 public class Demo331 {public static void main(String[] args) throws UnknownHostException {System.out.println(12.使用InetAddress的静态方法去创建对象,可以传入IP也能传入主机名);InetAddress IP1 InetAddress.getByName(127.0.0.1);System.out.println(IP1);InetAddress IP2 InetAddress.getByName(SUNCOYA-COMPUTER);System.out.println(IP2);System.out.println(13.通过getHostName方法获取主机名如果局域网中没有这一台主机那下面的输出就是以ip形式表示的);System.out.println(IP2.getHostName());System.out.println(通过getHostAddress方法获取IP地址);System.out.println(IP2.getHostAddress());}
}二.利用UDP发送与接收数据 1.端口号是什么由多少字节表示端口号的范围为什么范围的端口号被占用
应用程序在设备中的唯一标识由两个字节表示的整数范围为0-65535
0-1023端口用于知名的网络服务或者是应用一个端口号只能被一个应用使用。协议连接和通信的规则被称为网络通信协议
下面两个是传输层协议
2.什么是UDP有什么特点
User Datagram Protocol
是面向无连接通信协议数据直接发送不检查两台电脑是否可以连通爱要不要
传输速度快有大小限制一次最多发送64K数据不安全容易丢失数据
用于丢一点数据不太影响功能的应用语音通话网络会议可以使用
3.什么是TCP有什么特点
Transmission Control Protocol传输控制协议
是面向连接的通信协议速度慢没有大小限制数据安全
比如发送邮件4.利用UDP发送数据的具体步骤
以快递为例
1.找快递公司2.打包礼物3.快递公司发送包裹4.付钱走人 public class Demo332 {public static void main(String[] args) throws IOException {System.out.println((1)使用DatagramSocket数据包套接字创建对象的时候可以指定端口如果不指定随机使用一个端口发);DatagramSocket ds new DatagramSocket();System.out.println((2)使用DatagramPacket包裹信息数据长度IP端口);byte[] bytes 你好UDP协议.getBytes();InetAddress IP InetAddress.getByName(127.0.0.1);int port 10086;DatagramPacket dp new DatagramPacket(bytes,bytes.length,IP,port);System.out.println((3)使用datagramSocket对象的send方法发送datagramPacket数据);ds.send(dp);System.out.println((4)释放datagramSocket资源);ds.close();}
}1.利用UDP接受数据数据以快递为例
1.找快递公司2.接收打包3.在箱子里面找礼物解析数据4.签收走人释放资源2.接收端与发送端的运行顺序有要求吗
先运行接收端再运行发送端下面的控制台能够切换public class Demo333 {public static void main(String[] args) throws IOException {System.out.println((1)创建接收端的DatagramSocket对象需要指定发送端的端口);DatagramSocket ds new DatagramSocket(10086);System.out.println((2)新建datagramPacket对象接收对象需要的数组与长度也需要传递);byte[] bytes new byte[1024];DatagramPacket dp new DatagramPacket(bytes,bytes.length);System.out.println(使用ds的receive方法接收对象方法是阻塞的程序执行到这里会死等数据的到来);ds.receive(dp);System.out.println((3)使用dp的get数据方法解析数据包);byte[] data dp.getData();int length dp.getLength();InetAddress IP dp.getAddress();int port dp.getPort();//变成字符串注意一下长度System.out.println(new String(data,0,length)\n数据长度length\n数据发送地址IP\n端口port);System.out.println((4)关闭接收端);ds.close();}
}三.改聊天室 1.如何使一个类的运行变成多个不同的线程
在右上角的类名点击Edit ConfigurationsModifyOptions选择第一个使一个类能重复运行多次
2.datagramPacket类中传入的数据如果是字符串转换的byte数组传入长度的时候应该注意什么
传入的应该是byte数组的长度 public class Demo334 {public static void main(String[] args) throws IOException {DatagramSocket ds new DatagramSocket();Scanner scanner new Scanner(System.in);while (true) {String input scanner.nextLine();byte[] bytes input.getBytes();//这里的长度一开始传错了,注意不要传字符串的长度DatagramPacket dp new DatagramPacket(bytes, bytes.length, InetAddress.getByName(127.0.0.1), 10086);ds.send(dp);//如果不关闭的话就变成了一个聊天室多个人能够从这里面看到数据if (886.equals(input)) break;}ds.close();}
}
public class Demo335 {public static void main(String[] args) throws IOException {DatagramSocket ds new DatagramSocket(10086);byte[] message new byte[1024];DatagramPacket dp new DatagramPacket(message,message.length);while (true){ds.receive(dp);String str new String(dp.getData(),0,dp.getLength());InetAddress IP dp.getAddress();int port dp.getPort();System.out.println(IP为IP端口为port向10086端口发送了数据);System.out.println(str);if (886.equals(str))break;}ds.close();}
} 四.组播案例 单播只给一台设备发送数据
组播给一组设备发送数据224.0.0.0—239.255.255.255其中224.0.0.0-224.0.0.255)256个为预留的组播地址
广播给局域网中所有的电脑发送数据255.255.255.255四字节都是最大广播就不试了把单播的地址改为255.255.255.255即可 public class Demo336_MultyCast_Send {public static void main(String[] args) throws IOException {System.out.println(1.创建组播对象MulticastSocket组播套接字);MulticastSocket ms new MulticastSocket();System.out.println(2.打包数据也是一样的流程);String s Hello, MulticastSocket;byte[] bytes s.getBytes();System.out.println(IP指定为组播地址不知道为什么224.0.0.1不行);InetAddress IP InetAddress.getByName(224.0.0.2);int port 10000;DatagramPacket dp new DatagramPacket(bytes,bytes.length,IP,port);System.out.println(3.使用组播套接字对象发送数据);ms.send(dp);ms.close();}
}public class Demo337_MultiCast_Receive {public static void main(String[] args) throws IOException {System.out.println(1.创建组播套接字并设置接收端口);MulticastSocket ms new MulticastSocket(10000);System.out.println(2.将本机添加到224.0.0.2当中往后就是接收解析关闭);ms.joinGroup(InetAddress.getByName(224.0.0.2));byte[] bytes new byte[1024];DatagramPacket dp new DatagramPacket(bytes,bytes.length);ms.receive(dp);String ip dp.getAddress().getHostAddress();String name dp.getAddress().getHostName();int port dp.getPort();byte[] data dp.getData();System.out.println(ip为ip,主机名为name的及设备的端口号port发送了数据);System.out.println(new String(data,0,data.length));ms.close();}
}五.TCP通信案例
TCP在通信的两端各建立一个Socket对象通信之前要确保连接已经建立
通过IO流来进行网络通信三次握手协议建立连接
1.客户端向服务器发送请求等待服务器确认
2.服务器向客户端返回请求告诉客户端收到了请求
3.客户端向服务器再次发出确认消息连接建立
TCP设计成三次握手的目的就是为了避免重复连接因为会有多次请求的情况四次挥手协议断开连接需要确保连接通道里面的数据已经全部处理完多的那一步
1.客户端向服务器发送取消连接请求
2.服务端向客户端返回响应表示已经收到了客户端的请求需要等服务器处理完最后的数据
3.一旦处理完成服务器向客户端再次发出确认需要取消连接的消息
4.客户端再次发送确认消息取消连接客户端public class Demo338_TCP_Client {public static void main(String[] args) throws IOException {System.out.println(1.传入IP地址与端口号建立Socket对象);System.out.println(在创建对象的时候会连接服务器如果连接不上会报错);Socket socket new Socket(127.0.0.1,10000);System.out.println(2.通过套接字对象获取字节输出流向客户端输入数据);OutputStream os socket.getOutputStream();os.write(Hello, TCP!.getBytes());System.out.println(3.关闭socket也可以关闭输出流);socket.close();}
}
服务器端
public class Demo339_TCP_Server {public static void main(String[] args) throws IOException {System.out.println(1.创建服务端的ServerSocket对象,端口需要与客户端需要连接的端口保持一致);ServerSocket ss new ServerSocket(10000);System.out.println(2.调用accept方法等待客户端连接,返回Socket对象);System.out.println(没有人连就会卡死在这一行代码需要在这里获取Socket对象);Socket socket ss.accept();System.out.println(3.获取输入流);InputStream is socket.getInputStream();System.out.println(在这里一次性获得了所有的字节因为此处比较简单别的情况下中文可能会乱码可以使用转换流);byte[] bytes is.readAllBytes();System.out.println(new String(bytes));System.out.println(4.关闭socket对象相当于断开与客户端的连接);socket.close();System.out.println(5.关闭serverSocket对象相当于终结服务器资源);ss.close();}
}