通过 UDP+多线程 实现聊天功能

package liu.net.udp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import javax.swing.plaf.synth.SynthSpinnerUI;

public class ChatUseUdp {

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

//通过   UDP+多线程  实现聊天功能

//通过UDP协议完成一个聊天程序。一个负责发送数据的任务。一个负责接收数据的任务。两个任务需要同时进行,用多线程技术

//创建socket服务

DatagramSocket send = new DatagramSocket(10006);

//此端口需要与发送端指定的端口一致,否则接收不到数据

DatagramSocket rece = new DatagramSocket(10007);

new Thread(new Send(send)).start();

new Thread(new Receive(rece)).start();

}

}

//实现发送数据的类

class Send implements Runnable {

private DatagramSocket ds;

public Send(DatagramSocket ds) {

super();

this.ds = ds;

}

public void run() {

//具体要发送数据的内容

//1.从键盘输入发送的数据

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

//读取数据

String line = null;

try{

while((line=bf.readLine())!=null){

//2.将数据封装到数据包中

byte[] buf = line.getBytes();

DatagramPacket dp = new DatagramPacket(buf,buf.length,

InetAddress.getByName("127.0.0.1"),10007);

//3.把数据发送出去

ds.send(dp);

if("over".equals(line)){

break;

}

}

ds.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

//实现接收数据的类

class Receive implements Runnable {

private DatagramSocket ds;

public Receive(DatagramSocket ds) {

super();

this.ds = ds;

}

public void run() {

while(true){

//接收的具体任务内容

//1.因为接收的数据最终都会存储到数据包中,而数据包中必须有字节数组

byte[] buf = new byte[1024];

//2.创建数据包对象

DatagramPacket dp = new DatagramPacket(buf,buf.length);

//3.将收到的数据存储到数据包中

try {

ds.receive(dp);

} catch (IOException e) {

e.printStackTrace();

}

//4.获取数据

String ip = dp.getAddress().getHostAddress();

String data = new String(dp.getData(),0,dp.getLength());

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

if("over".equals(data)){

System.out.println(ip+":离开聊天室");

}

}

}

}

时间: 2024-08-29 17:48:17

通过 UDP+多线程 实现聊天功能的相关文章

Java UDP实现聊天功能代码

我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务器端需要阻塞式等待客户端的连接.而UDP则是可以直接向目的地址的目的端口上发送数据包,由于它只负责发送出去就好,不管对方是否正确接受到与否,所以当网络性能不好时它容易出现丢包的问题.(注意:UDP是基于数据报为单位进行传输的,而TCP是一种基于流进行传输的) 但是UDP很好的模拟了我们呢平时聊天的方式,可以很好的实现连续多次发送和接受,也就是简单的QQ聊天的功能. 现在来简要介绍Java中有关UDP编程相关的类:

JAVA实现UDP组播聊天程序

分类: Java 一.实验环境 编程语言:Java1.5(运行在JVM(Java Virsual Machine)) 开发工具:eclipce3.2 测试环境:局域网 二.实验目的 社会已经进入信息时代,网络技术在飞速发展.大量应用都依赖于从一个主机向多个主机或者从多个主机向多个主机发送同一信息的能力,在Internet上分布的数目可能达数十万台,这些都需要更高的带宽,并且大大超出了单播的能力.一种能最大限度地利用现有带宽的重要技术是IP组播. 三.组播聊天程序的实现: /** * 该程序实现了

Linux下p2p的聊天功能实现

Linux下p2p的聊天功能实现细节 Do one thing at a time, and do well. 今天闲着没事,写一个P2P的点对点的聊天功能的小程序,我觉得对网络编程初学者的学习很有用的.二话不说,我先贴代码吧.有几个地方需要考虑清楚.我会在代码的后面写出来.代码的下载文章的末尾. server.c #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <

[Asp.net 开发系列之SignalR篇]专题二:使用SignalR实现酷炫端对端聊天功能

一.引言 在前一篇文章已经详细介绍了SignalR了,并且简单介绍它在Asp.net MVC 和WPF中的应用.在上篇博文介绍的都是群发消息的实现,然而,对于SignalR是为了实时聊天而生的,自然少了不像QQ一样的端对端的聊天了.本篇博文将介绍如何使用SignalR来实现类似QQ聊天的功能. 二.使用SignalR实现端对端聊天的思路 在介绍具体实现之前,我先来介绍了使用SignalR实现端对端聊天的思路.相信大家在前篇文章已经看到过Clients.All.sendMessage(name,

我们一起学习WCF 第九篇聊天功能

说到聊天,那么其实就是传输数据,把自己写的东西传给自己想发送的那么人.我总结一下传输有三种方式 1:就是我们常见的数据库传输 2:就是文件(流)传输 3:就是socket传输 今天我们说的wcf实现聊天其实是基于socket的聊天功能(QQ聊天发展到今天肯定是很牛的了,但是最初肯定也是这样的思想) 今天我先说说基于WCF聊天的原理 1:需要一个回调函数(当用户发送的时候会吧信息回调给客户端本身) 2:需要一个委托(把服务器传来的信息显示给前台) 3:需要一个触发点击事件(目的是为了触发把发送信息

安卓平台基于SIP协议实现注册,聊天功能

============问题描述============ 不涉及音频,视频发送,只要实现注册,和聊天功能就行, 网上下了sipdroid的源码,但是XML中配置的<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/> 这段没明白,资料里说安卓最低支持SIP协议的API level是9,但是这版本不匹配呀,有大牛指导下么 ============解决方案1============

软件工程腾讯QQ (1)优点:聊天功能比较强大。同时提供安全登陆通道,保障了用户信息的安全性。应用的人群范围比较广 缺点:要展示的信息量太多,用户个人信息容易泄露。有一些弄虚作假通过其欺骗用户上当。 (2)有使用需要自己下载 (3)版本更新修复bug,定期更新版本

1.软件工程未来的发展方向是什么? 2.编程基础不好,我能学习好软件工程吗? 3.软件工程跟物联网之间的区别与联系是什么? 4.软件工程在现实生活中有哪些应用? 5.在软件工程的分类中,如何选择一个适合自己的? 6.软件工程的学习中最难克服的阶段是什么? 7.怎样学好软件工程? 腾讯QQ (1)优点:聊天功能比较强大.同时提供安全登陆通道,保障了用户信息的安全性.应用的人群范围比较广 缺点:要展示的信息量太多,用户个人信息容易泄露.有一些弄虚作假通过其欺骗用户上当. (2)有使用需要自己下载 (

在线聊天功能 实现中俄双语实时翻译 原创 加精!!

要做一个在线实时聊天系统,而且还要实时双语翻译(中.俄).头疼 先找了一个php在线客服系统 带源码的.看懂源码后在上面加翻译功能,一共耗时4天弄出来的. 代码如下: if(mb_detect_encoding($fdata,"UTF-8, GBK") != "UTF-8"){     //$fdata = mb_detect_encoding($fdata,"UTF-8, GBK")     $fdata = mb_convert_encodi

提高逼格,给自己的网站加入智能聊天功能

提高逼格,给自己的网站加入智能聊天功能 引言 现在突然发现有很多 QQ 群都开启了群机器人的功能,其中有两个角色,他们分别是:Baby Q 和 QQ 小冰.在 Q 群中,你可以对他们进行任意程度的调戏,不过,遗憾的是鱼和熊掌不可得兼,一个群只能进行二选一.据说 Baby Q 来自图灵公司,而小冰却是出生自微软公司. 无论是Baby Q,还是小冰,向我们展现的都是人工智能技术.这些产品都是利用深度神经网络算法模仿人脑的运算方式,让机器可以持续的自我学习. 目录 简介 机器人看板 简单调用 API