Java实例练习——基于UDP协议的多客户端通信
昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区:
代码如下:
//最核心的部分是在服务器端的线程部分
package net;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class UdpServerThread extends Thread { DatagramSocket socket = null;DatagramPacket getPacket = null; byte []msg = null;public UdpServerThread(DatagramSocket socket,DatagramPacket getPacket,byte []msg){this.socket = socket;this.getPacket = getPacket; this.msg = msg;}public void run(){//1、创建DategramSocket,指定端口号 System.out.println("我是服务器,客户端说:"+new String(msg,0,getPacket.getLength()));System.out.println("客户端的IP地址:"+getPacket.getAddress());//服务器向客户端发送响应信息byte[] sendMsg = "欢迎您!".getBytes();DatagramPacket sendPacket = new DatagramPacket(sendMsg, sendMsg.length, getPacket.getAddress(), getPacket.getPort());try {socket.send(sendPacket);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
//然后是服务器端
package net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** 基于UDP协议的通信,服务器端* @author syskey**/
public class UdpManyClientServ { public static void main(String args[]) throws IOException{//1、创建DategramSocket,指定端口号int clientCount = 0;DatagramSocket socket = new DatagramSocket(8800); System.out.println("***服务器正在启动,等待客户端连接***");byte[] msg = new byte[1024];//2、创建Data个人啊没Packet,用于接收客户端信息DatagramPacket getPacket =null;//2、创建Data个人啊没Packet,用于接收客户端信息while(clientCount<10){ try {getPacket = new DatagramPacket(msg, msg.length); socket.receive(getPacket);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}UdpServerThread udpServerThread =new UdpServerThread(socket,getPacket,msg);udpServerThread.start();clientCount++;System.out.println("客户端数量"+clientCount);//System.out.println("客户端的IP地址:"+socket.getInetAddress().getHostAddress());//} //socket.close();}}}
//客户端相对简单
package net;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;/*** 基于UDP通信的客户端* @author syskey**/public class UdpClient {public static void main(String args[]) throws IOException{byte[] sMsgbyte = "用户名:sysker;密码:128398908".getBytes();InetAddress serverIp = InetAddress.getByName("localhost");DatagramPacket packet = new DatagramPacket(sMsgbyte, sMsgbyte.length, serverIp, 8800);DatagramSocket socket = null;try {socket = new DatagramSocket();} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();}socket.send(packet);byte[] getMsg = new byte[1024];DatagramPacket getPacket = new DatagramPacket(getMsg, getMsg.length);socket.receive(getPacket);System.out.println("我是客户端,服务器说:"+new String(getMsg,0,getPacket.getLength()));socket.close();}
}
实现UDP协议多客户端通信与TCP/IP协议不同,TCP/IP中和客户端相关就一个通信类(Socket类),但是对UDP协议来说和客户端相关的通信类有两个(DatagramSocket和DatagramPacket),而在多客户端通信中,核心部分就是处理客户端的通信类,所以思路是一样的。但一开始我就套用TCP/IP协议下的多客户端通信,没有认真的分析UDP通信协议的特点,更没有对比TCP/IP协议和UDP协议的区别,所以导致UDP多客户端通信不能实现。
总结:学习JAVA时,不能生搬硬套,一定分析清楚其中的原理和区别,然后再去开始实践,不能上来就开始干代码。同时,在我们觉得自己已经掌握了某一个知识点时,最好是通过实践来练习一下,哪怕只是把之前你参考别人代码写的程序,重新按照刚才的思路写一遍,收获绝对不小,但前提条件是理解清楚原理,搞清楚思路。
转载于:https://www.cnblogs.com/caoleiCoding/p/6443818.html
Java实例练习——基于UDP协议的多客户端通信相关推荐
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
UDP协议:无需建立虚拟链路,协议是不可靠的. A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达:但有些情况下,数据报可能会丢失 ...
- Java网络编程——基于UDP协议的聊天室
UDP简述 UDP(User Datagram Protocol)协议是Internet 协议集支持的一个无连接的传输协议,中文名为用户数据报协议.它为应用程序提供了一种无需建立连接就可以发送封 ...
- 微信小程序基于udp协议与esp8266进行通信
1.概述 微信小程序有关于UDP协议的API,具体内容可前往官网查看:整体实现的思路就是利用路由组一个局域网,手机.路由器和esp8266,手机和esp8266连接路由器,登录路由器查看esp8266 ...
- java udp包_基于UDP协议的数据包收发程序(代码+报告)Java
[实例简介] 设计要求: 1)按照UDP协议数据包发送方式实现用户端之间的通信. 2)统计包的发送和接收数,计算数据包的丢失数. 3)设计美观易用的图形界面. [实例截图] [核心代码] 基于UDP协 ...
- java udp简单聊天程序_Java基于UDP协议实现简单的聊天室程序
最近比较闲,一直在抽空回顾一些java方面的技术应用. 今天没什么事做,基于udp协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对java网络编程方面的一个简单回忆. ...
- java udp 聊天室_Java基于UDP协议实现简单的聊天室程序
最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. ...
- android udp定时发送,Android Socket基于UDP协议通信
首先我们要知道UDP通信协议是Socket通信的一种实现方式,Socket通信一般有两种通信方式:基于TCP协议.基于UDP协议.这两者的差别和优缺点就不说了,这里主要讲一下基于UDP协议的实现. 基 ...
- 网络编程应用:基于UDP协议【实现文件下载】--练习
要求: 基于UDP协议实现文件下载 发送方–请求–接收方发送文件–发送方接收文件 代码: 发送方: package Homework1;import java.io.File; import java ...
- 基于UDP协议的局域网网络聊天工具
/* * 本程序实现了基于UDP协议的局域网网络聊天工具. * 参考网上的源码,发现一个calss就可以搞定. * ChatFrame类创建窗口,包含JTextField和TextArea. * 前者 ...
最新文章
- 从奥运订票系统说起——谈FastCGI 与IT 架构
- 百度搜索效果(页面传来数据地址,由服务器去获取)
- python文件指针放在文件的开头_将文件指针倒带到上一个lin的开头
- java线程池有哪几种,真香系列
- ASP.NET Core MVC上传、导入、导出知多少
- 移动WEB的页面布局
- 40个Java 多线程问题总结
- 采用python解决实际问题_应用 Python 解决一些实际问题
- jquery跨域请求示例
- python列表转集合_Python数据类型 列表、元组、集合、字典的区别和相互转换
- Excel的Range对象(C#)
- 【论文翻译】Image Super-Resolution Using Deep Convolutional Networks
- linux模拟gps,Android之GPS研究(实战篇二)
- 小白学 Python 爬虫(24):2019 豆瓣电影排行
- android m是什么单位,M代表什么单位?
- 微信朋友圈马赛克图片 —— 抓包破解
- 这个世界上,没有什么是实实在在的, 都是空虚,虚无, 空虚的空,虚无的虚,无的无....
- 作业录屏+露脸+视频裁剪+字幕添加(支持双语)
- Handler原理剖析
- (侯捷C++)1.1面向对象高级编程(上)