JAVA基础知识之网络编程——-基于UDP协议的通信例子

UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果。

java中基于UDP协议的通信使用DatagramSocket类的receive和send方法即可,但消息需要通过一个特定的类封装(DatagramPacket)

下面是一个基于UDP协议的通信的例子,

服务器端,

 1 package udp;
 2
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6
 7 public class Server {
 8     private static final int PORT = 3000;
 9     //数据报大小
10     private static final int  DATA_LEN = 4096;
11     //接受网络数据的字节数组
12     byte[] inBuff = new byte[DATA_LEN];
13     //接收数据
14     private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);
15     //发送数据
16     private DatagramPacket outPacket;
17     String[] books = new String[]
18     {
19         "疯狂英语",
20         "康熙词典",
21         "TCP协议",
22         "NIO非阻塞channel"
23     };
24     public void init() throws IOException {
25         try {
26             DatagramSocket socket = new DatagramSocket(PORT);
27             for (int i = 0; i < 1000; i++) {
28                 //读取socket中的数据
29                 socket.receive(inPacket);
30                 System.out.println(inBuff == inPacket.getData());
31                 System.out.println(new String(inBuff, 0, inPacket.getLength()));
32
33                 byte[] sendData = books[i % 4].getBytes();
34                 outPacket = new DatagramPacket(sendData, sendData.length, inPacket.getAddress(), PORT);
35                 socket.send(outPacket);
36             }
37         } catch (IOException e) {
38             e.printStackTrace();
39         }
40     }
41
42     public static void main(String[] args) throws IOException {
43         new Server().init();
44     }
45 }

客户端,

 1 package udp;
 2
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.InetAddress;
 7 import java.util.Scanner;
 8
 9 public class Client {
10     private static final int PORT = 3000;
11     //数据报大小
12     private static final int  DATA_LEN = 4096;
13     private static final String  DEST_IP = "127.0.0.1";
14     //接受网络数据的字节数组
15     byte[] inBuff = new byte[DATA_LEN];
16     //接收数据
17     private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);
18     //发送数据
19     private DatagramPacket outPacket;
20
21     public void init() throws IOException {
22         try {
23             //使用随机端口创建socket
24             DatagramSocket socket = new DatagramSocket();
25             outPacket = new DatagramPacket(new byte[0], 0, InetAddress.getByName(DEST_IP), PORT);
26             Scanner scann = new Scanner(System.in);
27             while (scann.hasNextLine()) {
28                 byte[] buff = scann.nextLine().getBytes();
29                 outPacket.setData(buff);
30                 socket.send(outPacket);
31                 socket.receive(inPacket);
32                 System.out.println(new String(inBuff, 0, inPacket.getLength()));
33             }
34         } catch(IOException e) {
35             e.printStackTrace();
36         }
37     }
38
39     public static void main(String[] args) throws IOException {
40         new Client().init();
41     }
42 }

执行结果,启动一个服务器端,再启动一个客户端发一条信息,服务器端输出了信息,

时间: 2024-10-11 07:38:09

JAVA基础知识之网络编程——-基于UDP协议的通信例子的相关文章

JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. 网络分层除了OSI模型分层,还有TCP/IP模型分层,将网络划分为四层,应用层.传输层.网际层

java 网络编程 基于UDP协议的通信

使用UDP协议,写一个能在同一界面发送消息,并显示消息的聊天软件. 代码实现如下: package com.abel.socket; import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.util.Scanner; /* * 多线程在一个界面同时完成发送接收 * 1 发送send * ***创建

JAVA基础知识之网络编程——-基于AIO的异步Socket通信

异步IO 下面摘子李刚的<疯狂JAVA讲义> 按照POSIX标准来划分IO,分为同步IO和异步IO.对于IO操作分为两步,1)程序发出IO请求. 2)完成实际的IO操作. 阻塞IO和非阻塞IO都是针对第一步来划分的,如果发出IO请求会阻塞线程,就是阻塞IO,否则就是非阻塞IO. 同步IO和非同步IO是针对第二步来说的,如果实际IO操作是由操作系统完成,再返回给程序,就是异步IO. 如果实际的IO需要程序本身去执行,会阻塞线程,就是同步IO. JAVA7的NIO.2提供了异步的channel,

JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信

阻塞IO与非阻塞IO 通常情况下的Socket都是阻塞式的, 程序的输入输出都会让当前线程进入阻塞状态, 因此服务器需要为每一个客户端都创建一个线程. 从JAVA1.4开始引入了NIO API, NIO可以实现非阻塞IO, 这样就可以使用一个线程处理所有的客户请求. 基于NIO的非阻塞Socket通信 服务器将用来监听客户端请求的channel注册到selector上,启动一个线程,使用selector的select()获取求情的客户端的channel数量, 当监听到有客户端请求时,就通过Sel

Java网络编程 - 基于UDP协议 实现简单的聊天室程序

最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理. "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: 将客户端的信息(进入了哪一个聊

JAVA基础知识之网络编程——-网络基础(多线程下载,get,post)

本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web资源,URLDecode和URLEncode用来转换字符串. 本文会写两个例子来演示java网络编程的一些基本用法. 第一个例子,写一个程序用来模拟多线程下载. 本例中用到的技术有,多线程--多个线程同时读文件写文件,可以加快下载速度, 线程池--在本例中线程池不是必须,甚至是多余,只不过是为了演示

网络编程: 基于UDP协议的socket

udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接 UDP协议的通信优势: 允许一个服务器同时和多个客户端通信, TCP不行 原文地址:https://www.cnblogs.com/niuli1987/p/9470035.html

java基础学习总结——网络编程

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——网络编程 一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程. 二.网络通信协议及接口 三.通信协议分层思想 四.参考模型 五.IP协议 每个人的电脑都有一个独一无二的IP地址,这样互相通信时就不会传错信息了. IP地址是用一个点来分成四段的,在计算机内部IP地址是用四个字节来表示的,一个字节代表一段,每一个字节代表的数最大只能到达255. 六.TCP协议和UD

Java基础篇Socket网络编程中的应用实例

说到java网络通讯章节的内容,刚入门的学员可能会感到比较头疼,应为Socket通信中一定会伴随有IO流的操作,当然对IO流比较熟练的哥们会觉得这是比较好玩的一章,因为一切都在他们的掌握之中,这样操作起来就显得非常得心应手,但是对于IO本来就不是多熟悉的哥们来说就有一定的困难了,在搞清楚IO流操作机制的同时还必须会应用到Socket通信中去,否则会对得到的结果感到非常郁闷和懊恼,下面就和大家一起分享一下自己遇到一点小麻烦后的感触以及给出的解决办法. 要求:客户端通过Socket通信技术上传本地一