udp 局域网群聊

UDP:

无连接协议

udp协议发送数据,用的是数据报包的形式。(64KB以内)

发送端:

1.定义发送的datagramsocket对象,发送端可以不用定义端口

2.定义封装数据包datagrampacket

3.发送数据包

4.关闭资源

//InetAddress.getByName("192.168.3.255")必须是统一的网段

public class UdpSendThread implements Runnable {

	DatagramSocket ds;
	byte[] buf;

	public UdpSendThread(DatagramSocket ds) {
		this.ds = ds;
	}

	public UdpSendThread(DatagramSocket ds, String str) {

		this.ds = ds;
		this.buf = str.getBytes();
	}

	@Override
	public void run() {

		String brStr;
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "utf-8"));

				while ((brStr = br.readLine()) != null) {

					if(brStr.startsWith("@")){

					}

					DatagramPacket dp = new DatagramPacket(brStr.getBytes(), brStr.getBytes().length,
							InetAddress.getByName("192.168.3.255"), 9000);

					ds.send(dp);
					if (brStr.equals("over")) {
						break;
					}

				}

			//br.close();
			ds.close();
		} catch (UnknownHostException | UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

  

接收端:

1、建立DatagramSocket对象

2、定义一个空的数据包

3、接受数据包

4、解析数据包

5、关闭资源

public class UdpRececiveThread extends Thread {

	DatagramSocket ds;

	public UdpRececiveThread(DatagramSocket ds) {

		this.ds = ds;
	}

	@Override
	public void run() {

		while(true){
			byte[] buf = new byte[1024*1024];
			DatagramPacket dp = new DatagramPacket(buf, buf.length);

			try {
				ds.receive(dp);
				String ip = dp.getAddress().getHostAddress();
				String content = new String(dp.getData(),0,dp.getLength());
				if(content.equals("over")){
					System.out.println(ip+"退出");
				}

				System.out.println(ip+":"+content);

			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	}
}

  测试类:

	public static void main(String[] args) throws SocketException {

		DatagramSocket sendDs = new DatagramSocket();
		DatagramSocket reDs = new DatagramSocket(9000);
	    new Thread(new UdpSendThread(sendDs)).start();;
		new UdpRececiveThread(reDs).start();
	}

  

时间: 2024-11-04 06:42:42

udp 局域网群聊的相关文章

Java-->实现群聊功能(C/S模式--TCP协议)

--> Java 对TCP协议的支持: --> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端. --> Client 类定义客户端 package com.dragon.java.tcpchat; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端 * *

Java UDP使用Socket进行网络聊天(2)之群聊版

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39312241 本文演示,使用Socket进行网络聊天之群聊,实现客户端给"局域网"网段里面的所以机器发送广播,当发送“886”的时候,表示客户端关闭. 1)客户端,给服务器发送数据,发送“886”表示关闭客户端. 2)服务器,一直监听9527端口,将监听到的数据打印在控制台上. 3)客户端+服务器版本,实现既可以发送数据,又可以接受数据的多线程聊天程序. 需要注

JAVA使用多播套接字实现群聊室(局域网)

import java.awt.Dimension; import java.awt.TextArea; import java.awt.TextField; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;

Java 使用Socket进行网络聊天(2)之群聊版

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39312241 本文演示,使用Socket进行网络聊天之群聊,实现客户端给"局域网"网段里面的所以机器发送广播,当发送"886"的时候,表示客户端关闭. 1)客户端,给服务器发送数据,发送"886"表示关闭客户端. 2)服务器,一直监听9527端口,将监听到的数据打印在控制台上. 3)客户端+服务器版本,实现既可以发送数据,

Java套接字编程实现群聊与私聊[原理版]

简介 运用Java套接字我们几乎可以完成一个网络聊天软件的小产品,本文不涉及UI部分,仅对原理部分用代码演示一下.一个可以多人聊天的小功能,在Linux系统上用telnet亲测可用. 服务器代码 package demo0811.demo3; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.

基于itchat的微信群聊小助手基础开发(一)

前段时间由于要管理微信群,基于itchat开发了一个简单的微信机器人 主要功能有: 图灵机器人功能 群聊昵称格式修改提示 消息防撤回功能 斗图功能 要开发一个基于itchat的最基本的聊天机器人,在github上作者已经给出基本的操作,本博文只对附加的功能进行说明总结. 确保已经了解itchat的基本操作,先对功能1和功能2进行说明: 1.图灵机器人功能 该功能也是最基础的功能之一,itchat的基础案例也有相关例子. 图灵机器人简单而言就是以一定的规则给图灵的服务器发送数据包,图灵的服务器会以

4高并发服务器:UDP局域网服务器(组播)

 1 UDP局域网服务器 A读出每一个客户端发送过来的数据包,然后fork出子进程,由子进程去处理客户端请求. B客户端与服务器段交换多个数据报,服务器为每一个客户端连接创建新的socket,在其上bind一个临时端口,然后用该socket处理对应客户端上的所有应答,这个办法要求在客户查看服务器第一个应答中的源端口号.然后后面利用此端口号和服务器进行交互. 2函数声明 int bind(int sockfd, const struct sockaddr*addr,socklen_t addr

实现了私聊和群聊功能的聊天工具

在前面的博客(简单的C/S聊天室)中,我们已经提到了,采用的是多线程的方法.服务器端主线程负责不断的侦听端口,子线程负责接收和发送消息.客户端主线程需要接收键盘消息,将其发送到服务器端,子线程需要接收服务器端发过来的消息.在这个简易的C/S聊天室的实现中,仅仅实现了群聊的功能,没有实现私聊.那么,本文就讲实现私聊和群聊. 首先我们想到的是,消息发过来,我怎么知道是公聊消息还是私聊消息呢.所以,这里需要对消息进行处理,比如说在消息前后都加上一些特殊的字符,我们称为协议字符.为此,我们可以定义一个接

如何解决群聊(MUC)聊天室重复存储、接收自己发送的消息的问题

CHENYILONG Blog 如何#解决方案#群聊(MUC)聊天室重复存储.接收自己发送的消息 编号 项目 描述 1 问题描述 单聊没问题,群聊会出现自动回复的问题 数据库中存储的数据出现的问题 界面上出现的问题:类似自动回复.回音壁一样一模一样地回答.  2 问题产生的原因 3 群聊基本的原理示意图 聊天内容的显示是经由从数据库进行的读取排序, 4 #解决方案# 拦截阻挡红色区域的执行  5 失败的尝试:尝试但是没有效果的方法 // AppDelegate.m中#pragma 接收消息代理监