UDP聊天室 java

要求实现一个聊天室,能同时接收和发送信息。

下面的代码用两个线程在处理发送和接收信息。信息在网际的传递采用UDP协议。这种方法不需要建立连接,因此比较高效,但是正因补永济哪里连接,因此会有丢包的不安全性。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

//聊天室类
public class TalkingRoom
{
    public static void main(String[] args) throws Exception
    {
        DatagramSocket sendds=new DatagramSocket();
        DatagramSocket receiveds=new DatagramSocket(10001);
        //两个线程,分别是发送和接收线程
        new Thread(new Send(sendds)).start();
        new Thread(new Recieve(receiveds)).start();
    }
}
//发送类
class Send implements Runnable
{
    DatagramSocket ds;
    public Send(DatagramSocket ds)
    {
        this.ds=ds;
    }

    public void run()
    {
        //从键盘按行读入
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String line=null;
        try
        {
            while((line=br.readLine())!=null)
            {
                byte[] buf=line.getBytes();
                DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.255"),10001);
                ds.send(dp);
                if (line.equals("over"))
                    break;
            }
        } catch (Exception e) {
            }
        ds.close();
    }
}
// 接收类
class Recieve implements Runnable
{
    DatagramSocket ds;
    public Recieve(DatagramSocket ds)
    {
        this.ds=ds;
    }
    public void run()
    {
        while(true)
        {
            byte[] buf=new byte[1024];
            DatagramPacket dp=new DatagramPacket(buf,buf.length);

            try {
                ds.receive(dp);
            } catch (Exception e) {
            }

            String ip=dp.getAddress().getHostAddress();
            String text=new String(dp.getData(),0,dp.getLength());
            if(text.equals("over"))
                System.out.print("对方已下线");
            else
                System.out.println(ip+":"+text);
        }
    }
}

原文地址:https://www.cnblogs.com/javaStudy947/p/9180478.html

时间: 2024-10-18 13:08:41

UDP聊天室 java的相关文章

UDP聊天室

pub.h   定义了一些消息的结构和宏变量 #ifndef _PUB_H_ #define _PUB_H_ #include <list> #include <algorithm> using namespace std; // C2S #define C2S_LOGIN            0x01 #define C2S_LOGOUT            0x02 #define C2S_ONLINE_USER        0x03 #define MSG_LEN  

python 入门 socket 实现udp聊天室

什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) 参数 family: 套接字家族可以使AF_UNIX或者AF_INET type: 套接字类型可以根据是面向连接的还是非连接分为SOCK

UDP聊天程序------java

通过键盘录入获取要发送的信息. 将发送和接收分别封装到两个线程中. package cn.hncu.UDP; <span style="font-size:32px;color:#ff0000;">//发送方</span> import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketExcept

C 基于UDP实现一个简易的聊天室

引言 本文是围绕Linux udp api 构建一个简易的多人聊天室.重点看思路,帮助我们加深 对udp开发中一些api了解.相对而言udp socket开发相比tcp socket开发注意的细节要少很多. 但是水也很深. 本文就当是一个demo整合帮助开发者回顾和继续了解 linux udp开发的基本流程. 首先我们来看看 linux udp 和 tcp的异同. /* 这里简单比较一下TCP和UDP在编程实现上的一些区别: TCP流程 建立一个TCP连接需要三次握手,而断开一个TCP则需要四个

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

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

UDP传输:简易聊天室的搭建。。。

转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/45665309 最近看了一个教学视频,学习socket编程,里面有一个例子感觉写的不错,我就在此整理一下,帮助我回忆,查看. 编写一个聊天程序. 有收数据的部分,和发数据的部分. 这两部分需要同时执行. 那就需要用到多线程技术. 一个线程控制收,一个线程控制发. 因为收和发动作是不一致的,所以要定义两个run方法. 而且这两个方法要封装到不同的类中. 效果如图所示: 因为我

Java网络编程案例---聊天室

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中JavaSE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节. java.net包中提供了两种常见的网络协议的支持: TCP:TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信.通常用于互联网协议,被称TCP/IP. UDP:UDP是用户数据报协议的缩写,一个无连接的协议.提供了应用程序之间要发送的数据的数据报. 本案例以

Java NIO示例:多人网络聊天室

一个多客户端聊天室,支持多客户端聊天,有如下功能: 功能1: 客户端通过Java NIO连接到服务端,支持多客户端的连接 功能2:客户端初次连接时,服务端提示输入昵称,如果昵称已经有人使用,提示重新输入,如果昵称唯一,则登录成功,之后发送消息都需要按照规定格式带着昵称发送消息 功能3:客户端登录后,发送已经设置好的欢迎信息和在线人数给客户端,并且通知其他客户端该客户端上线 功能4:服务器收到已登录客户端输入内容,转发至其他登录客户端. 功能5 TODO:客户端下线检测  方案是:客户端在线的时候

java多线程控制台聊天室(转)

用java多线程实现一个控制台聊天室,呵呵,好玩! 聊天室服务器端 Java代码   package tf.thread; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.u