南通大型网站建设,齐河专业企业网站建设,阿里云服务器做网站外网访问慢,大连企业网站哪一家好1. 什么是网络编程【理解】 1.1 概念 在网络通信协议下#xff0c;不同计算机上运行的程序#xff0c;进行的数据传输。 应用场景: 即时通信、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景#xff0c;都是计算机跟计算机之间通过网络进行数据传输Java中可以使…1. 什么是网络编程【理解】 1.1 概念 在网络通信协议下不同计算机上运行的程序进行的数据传输。 应用场景: 即时通信、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景都是计算机跟计算机之间通过网络进行数据传输Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序
1.2 常见的软件架构 1.21 C/S C/S全称Client/Server客户端/服务器采取该架构的软件需要在用户本地需要下载并安装客户端程序在远程有一个服务器端程序[例如:QQ,Steam] 1.22 B/S B/S全称Browser/Server (浏览器/服务器)采取该架构的软件只需要一个浏览器用户通过不同的网址。客户访问不同的服务器[例如:京东淘宝] 1.23 C/S,B/S的选择(优缺点) 总结:CS适合专业化的办公软件BS适合移动互联网应用C/S 优点 画面可以做的非常精美用户体验好 缺点 用户需要下载和更新的时候比较麻烦需要开发客户端也需要开发服务端 B/S 所有的通过服务器访问的其实都是bs架构如网页游戏购物商城 。优点[方便] 不需要开发客户端只需要页面服务端用户不需要下载打开浏览器就能用 缺点 如果应用过大用户体验受到影响
2. 网络编程三要素【理解】 2.1 三要素简单概况 IP地址 设备在网络中的地址是唯一的标识 端口 应用程序在设备中唯一的标识 协议 数据在网络中传输的规则常见的协议由UDP、TCP、http、https、ftp。 2.2 IP 2.21 概念 全称Internet Protocol是互联网协议地址也称IP地址。是分配给上网设备的数字标签。通俗理解:上网设备在网络中的地址是唯一的。 2.22 常见的IP分类 IP地址分为两大类 IPv4全称Internet Protocol version 4,互联网通信协议第四版 采用32位地址长度分为4组 例如一个采用二进制形式的IP地址是“11000000 10101000 00000001 01000010”为了方便使用IP地址经常被写成十进制的形式中间使用符号“.”分隔不同的字节。于是上面的IP地址可以表示为“192.168.1.66”。IP地址的这种表示法叫做“点分十进制表示法”这显然比1和0容易记忆得多 缺点:ip地址不够用,仅有不到43亿于是诞生了IPv6 IPv6【了解】全称Internet Protocal version 6,互联网通信协议第六版。 采用128位地址长度分成8组这里就不举例子了可以参考IPv4的IP地址不过为8组,也因此有2的128次方的ip地址为了方便使用IPv6使用冒分十六进制表示法,将上面每一组转为十六进制并用冒号分隔。如2001:0DB8:0000:0023:0008:0800:200C:417A因为比较长的原因故把每一组前面的零进行省略记录成2001:DB8:0:23:8:800:200C:417A特殊情况:如果计算出的16进制里面有很多连续的0可以使用0位压缩表示法,如FF01:0:0:0:0:0:0:1101可以转为FF01::1101 2.23 IPv4的地址分类形式 主要分为公网地址(万维网使用) 和 私有地址(局域网使用)私有地址 192.168.开头的就是私有地址范围即为192.168.0.0--192.168.255.255,专门为组织机构内部使用以此节省IP 特殊IP地址 127.0.0.1也可以是localhost是回送地址也称本地回环地址也称本机IP永远只会寻找当前所在本机。 常见的CMD命令 ipconfig查看本机IP地址ping检查网络是否连通 2.24 InetAddress的使用 概况:此类表示Internet协议IP地址 相关方法 方法名说明static InetAddress getByName(String host)确定主机名称的IP地址。主机名称可以是机器名称也可以是IP地址String getHostName()获取此IP地址的主机名String getHostAddress()返回文本显示中的IP地址字符串
public class MyInetAddress {public static void main(String[] args) throws UnknownHostException {//IP的对象,看作为电脑的对象InetAddress address InetAddress.getByName(LAPTOP-BPH5T8C9);InetAddress address1 InetAddress.getByName(127.0.0.1);System.out.println(address);System.out.println(address1);String name address.getHostAddress();System.out.println(name);String ipaddress.getHostAddress();System.out.println(ip);}
}2.3 端口号 概念:应用程序在设备中唯一的标识端口号: 由两个字节表示的整数取值范围:0~65535其中0~1023之间的端口号用于一些知名的网络服务或者应用我们使用1024以上的端口号就可以了。 注意:一个端口号只能被一个应用程序使用 2.4 协议 2.41 主要概念: 计算机网络中连接和通信的规则被称为网络通信协议OSI参考模型世界互联协议标准全球通信规范,单模型过于理想化未能在因特网上进行广泛推广TCP/IP参考模型(或TCP/IP协议)事实上的国际标准我们本次主要学习UDP协议和TCP协议 2.42 UDP与TCP协议的简单概括 UDP协议 UDP是面向无连接通信协议特点 用户数据报协议速度快有大小限制一次最多发送64K,数据不安全易丢失数据 应用场景 网络会议语音通话在线视频 TCP协议 TCP是面向连接的通信协议特点 速度慢没有大小限制数据安全 应用场景 下载软件文字聊天发送邮件
3. UDP通信程序 3.1 UDP通信程序步骤(发送数据) 发送数据的步骤(右边是将其理解为寄东西的理解) 创建发送端的Socket对象(DatagramSocket) 找快递公司 创建数据并把数据打包 打包礼物 调用DatagramSocket对象的方法发送数据 快递公司发送包裹 关闭发送端 付钱走人 3.2 UDP发送方法 构造方法 方法名说明DatagramSocket()创建数据报套接字并将其绑定到本机地址上的任何可用端口DatagramPacket(byte[] buf,int len,InetAddress add,int port)创建数据包,发送长度为len的数据包到指定主机的指定端口 相关方法 方法名说明void send(DatagramPacket p)发送数据报包void close()关闭数据报套接字void receive(DatagramPacket p)从此套接字接受数据报包 public static void main(String[] args) throws IOException {//创建DatagramSocket对象DatagramSocket ds new DatagramSocket();//打包数据String str数据传输中ing;byte[] bytesstr.getBytes();InetAddress address InetAddress.getByName(127.0.0.1);int port10086;DatagramPacket dpnew DatagramPacket(bytes,bytes.length,address,port);//发送数据ds.send(dp);//释放资源ds.close();}
细节: 绑定端口我们以后就是通过这个端口往外发送空参:所有可用的端口随机一个进行使用有参:指定端口号进行绑定 3.3 UDP通信程序步骤(接收数据) 接收数据的步骤(右边是将其理解为收东西的理解) 创建接收端的DatagramSocket对象 找快递公司接受打包好的数据 接收箱子解析数据包 从箱子里面获取礼物释放资源 签收走人 3.4 UDP接收方法 构造方法 方法名说明DatagramPacket(byte[] buf, int len)创建一个DatagramPacket用于接收长度为len的数据包 相关方法 方法名说明byte[] getData()返回数据缓冲区int getLength()返回要发送的数据的长度或接收的数据的长度 public static void main(String[] args) throws IOException {//细节//在接收的时候一定要绑定端口//而且绑定的端口一定要跟发送的端口保持一致//创建DatagramSocket对象DatagramSocket dsnew DatagramSocket(10086);//接收数据包byte[] bytesnew byte[1024];DatagramPacket dpnew DatagramPacket(bytes,bytes.length);ds.receive(dp);//解析数据被byte[] datadp.getData();int len dp.getLength();InetAddress address dp.getAddress();int port dp.getPort();System.out.println(接收到数据new String(data,0,len));System.out.println(该数据是从address这台电脑中的port这个端口发出的);//释放资源ds.close();}
细节:绑定端口我们以后就是通过这个端口往外发送空参:所有可用的端口随机一个进行使用有参:指定端口号进行绑定receive方法是堵塞的会一直等发送端发送信息
3.5 UDP的三种通信方式
单播一对一个,一个电脑作为发送端只给一台电脑发送数据 上述的代码就是单播 组播一对一组,一个电脑作为发送端可给一组电脑发送数据 组播地址:224.0.0.0~239.255.255.255 其中224.0.0.0~224.0.0.255 为预留的组播地址 广播一对一群一个电脑作为发送端可以给局域网中所有电脑发送数据 广播地址:255.255.255.255
// 发送端
public class ClinetDemo {public static void main(String[] args) throws IOException {// 1. 创建发送端的Socket对象(DatagramSocket)DatagramSocket ds new DatagramSocket();String s hello 组播;byte[] bytes s.getBytes();InetAddress address InetAddress.getByName(224.0.1.0);int port 10000;// 2. 创建数据并把数据打包(DatagramPacket)DatagramPacket dp new DatagramPacket(bytes,bytes.length,address,port);// 3. 调用DatagramSocket对象的方法发送数据(在单播中,这里是发给指定IP的电脑但是在组播当中,这里是发给组播地址)ds.send(dp);// 4. 释放资源ds.close();}
}
// 接收端
public class ServerDemo {public static void main(String[] args) throws IOException {// 1. 创建接收端Socket对象(MulticastSocket)MulticastSocket ms new MulticastSocket(10000);// 2. 创建一个箱子,用于接收数据DatagramPacket dp new DatagramPacket(new byte[1024],1024);// 3. 把当前计算机绑定一个组播地址,表示添加到这一组中.ms.joinGroup(InetAddress.getByName(224.0.1.0));// 4. 将数据接收到箱子中ms.receive(dp);// 5. 解析数据包,并打印数据byte[] data dp.getData();int length dp.getLength();System.out.println(new String(data,0,length));// 6. 释放资源ms.close();}
}
运行效果