前言
在最初的编程过程中,多半是编写完代码,运行,然后在控制台输出或在电脑中以文件的形式输出,本篇就是可以将文本跨局域网输出的简单介绍。
一、网络编程三要素
目前网络编程分为CS架构和BS架构。
CS架构就是以客户端的形式与服务端进行交互,用户一般需要在本地下载客户端进行使用。我们所熟知的QQ微信或者是一些游戏都是CS架构。
BS架构则是直接通过浏览器与服务端进行进行交互,不需要用户下载客户端,只需要用户有浏览器即可。
网络编程三要素分别是IP,端口,协议。
1.IP地址
表示设备在网络中的地址,是网络中设备的唯一标识。IP地址分为IPV4和IPV6,若想要查询自己电脑目前使用的IP地址,可以直接在命令行窗口输入ipconfig来查看。
2.端口号
应用程序在设备中唯一的标识,在计算机中有很多的端口,使用程序时都需要占用一个端口,端口分为以下几类:
-
周知端口:0~1023,被预先定义的知名应用程序占用(如:HTTP占用80,FTP占用21)
-
注册端口:1024~49151,分配给用户经常或者某些应用程序
-
动态端口:49152~65536,之所以称为动态端口,是因为它一般不固定分配给某进程,而是动态分配的。
3.协议
连接和数据在网络中传输的规则。为了让网络中的设备进行通信,实现指定的规则就是协议。
二、UDP协议
UDP协议时面向无连接的,不需要确认双方是否哦存在,就可以开始传输,类似直播,不需要确认是否有多少观众在看,只管往外播出。
在Java中提供了一个DatagramSocket类来完成基于UDP协议的收发数据。数据要以数据包的形式进行收发,,一个数据包时限制在64KB以内的。
1.简单的创建服务端和客户端
服务端的代码如下:
public class Server {
public static void main(String[] args) throws Exception {
//创建一个DatagramSocket作为服务端,许哟啊传入端口号,需要与客户端端口一致.
DatagramSocket ds = new DatagramSocket(10000);
//创建一个byte数组用于接受数据
byte[] data=new byte[1024];
//创建DatagramPacket,需要传入byte数组用于接收参数,和数组长度
DatagramPacket dp=new DatagramPacket(data,1024);
ds.receive(dp);
//接受数据的长度
int length = dp.getLength();
//就收的数据
byte[] data1 = dp.getData();
//将接收到的数据存入String中,String会自动转化为子字符串,输出即可.
//需要传入接收到的byte数组,从0索引开始,一共截取length长度的数据
String read = new String(data1, 0, length);
System.out.println(read);
//释放资源
ds.close();
}
}
客户端的代码如下:
public class Client {
public static void main(String[] args) throws Exception {
//往外发数据,需要先创建一个DatagramSocket对象.
DatagramSocket ds = new DatagramSocket();
//需要发送的数据,转化为byte数组
byte[] bytes = "你好".getBytes();
//创建数据包,将要发出的数据包装成对象需要传输四个参数
//byte数组,数组长度,需要发送到的IP地址(需要传入InetAddress类型值),端口号
DatagramPacket dp = new DatagramPacket(
bytes,
bytes.length,
//127.0.0.1是指向自己电脑的
InetAddress.getByName("127.0.0.1"),
10000);
//发送数据
ds.send(dp);
System.out.println("数据发送完毕");
//释放资源
ds.close();
}
}
运行结果如下:
这样一个简单发送数据就创建好了,需要说明的是需要先启动接收端再启动发送端。
但因为程序一般不会再发送依次数据就停止,而是不断收,不断发送,,并且需要用户键盘输入,所以可以对程序进行优化。
2.优化代码
客户端代码如下:
public class Client {
public static void main(String[] args) {
//创建键盘录入
Scanner scanner=new Scanner(System.in);
//因为会有异常,所以需要抓一下异常
try (
//往外发数据,需要先创建一个DatagramSocket对象.
DatagramSocket ds = new DatagramSocket();
){
//只需要创建死循环,即可实现不断发送消息
while (true) {
//需要发送的数据修改为需要键盘录入,兵器直接转化为byte数组
byte[] bytes = scanner.next().getBytes();
//创建数据包,将要发出的数据包装成对象需要传输四个参数
//byte数组,数组长度,需要发送到的IP地址(需要传入InetAddress类型值),端口号
DatagramPacket dp = new DatagramPacket(
bytes,
bytes.length,
//127.0.0.1是指向自己电脑的
InetAddress.getByName("127.0.0.1"),
10000);
//发送数据
ds.send(dp);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
服务器端代码如下:
public class Server {
public static void main(String[] args){
//抓异常
try (
//创建一个DatagramSocket作为服务端,许哟啊传入端口号,需要与客户端端口一致.
DatagramSocket ds = new DatagramSocket(10000);
){
//创建一个byte数组用于接受数据
byte[] data=new byte[1024];
//创建DatagramPacket,需要传入byte数组用于接收参数,和数组长度
DatagramPacket dp=new DatagramPacket(data,1024);
//创建死循环
while (true) {
ds.receive(dp);
//接受数据的长度
int length = dp.getLength();
//就收的数据
byte[] data1 = dp.getData();
//将接收到的数据存入String中,String会自动转化为子字符串,输出即可.
//需要传入接收到的byte数组,从0索引开始,一共截取length长度的数据
String read = new String(data1, 0, length);
System.out.println(read);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
这样就会再输入的情况下才能并回车发送才可以进行发送,只要不停止程序,是可以一直进行发送的。
在进行传输时,IP号是可以更改的只要将IP号更改为另一台电脑的IP地址即可,只要端口号一致,,接收端打开,发送端即可发送数据,但仅限于局域网内。文章来源:https://www.toymoban.com/news/detail-816653.html
总结
本文讲述了基于UDP的通信的简单创建过程,之后会结合多线程技术,将代码进行进一步优化。文章来源地址https://www.toymoban.com/news/detail-816653.html
到了这里,关于基于UDP的通信的创建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!