美文网首页百人计划
写一个简易聊天程序

写一个简易聊天程序

作者: 寻叶亭 | 来源:发表于2017-06-18 15:15 被阅读415次
  • 需求:编写一个聊天程序

  • 思路:有收有发,且同时执行,需要用到多线程
    • 发送端:
      1.建立updsocket服务
      2.打包DatagramPacket(byte []buf, int length, InetAddress address, int port)
      3.send发送数据
      4.关闭连接

    • 接收端:
      1.建立socket服务,监听一个端口
      2.建立一个数据包用来存储接收的数据
      3.接收数据
      4.输出发送端的ip+数据包

发送端代码如下:

  class Send implements  Runnable 
     {
        private DatagramSocket ds;//1.建立socket服务
        public Send(DatagramSocket ds) 
        {
            this.ds = ds;
        }
        public void run() 
        {
            try 
            {
                BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));//键盘输入
                String line = null;//line初始化为空
                while (null!=(line=bf.readLine()))//逐行读取
                {
                    byte [] bt = line.getBytes();//字节数据打包成数组
                    DatagramPacket dp = new DatagramPacket(bt, bt.length,InetAddress.getByName("192.168.1.255"),10086);
                    //2.打包后指定发送的ip和端口,255是一个广播地址,故是群发消息
                    ds.send(dp);//3.发送数据
                    if ("376".equals(line))//当输入消息为“376”时终止输入
                        break;//4.关闭资源
                }
            } 
            catch (Exception e) 
            {
                throw new RuntimeException("发送端失败");//抛异常
            }   
        }
    }

接收端代码

    class Rece implements  Runnable
     {
        private DatagramSocket ds;
        public Rece(DatagramSocket ds) 
        {
            this.ds = ds;
        }
        public void run() 
        {
            try 
            {
                while(true)
                {
                    byte [] buf = new byte[1024];//2.建立一个数据包用来存储接收的数据
                    DatagramPacket dp = new DatagramPacket(buf, buf.length);
                    ds.receive(dp);//接收数据
                    String ip =dp.getAddress().getHostAddress();
                    String data =new String(dp.getData(),0,dp.getLength());
                    if ("376".equals(data))//当某个发送端退出时
                        {
                            System.out.println(ip+"已退出聊天室");//打印提示
                            break;
                        }
                    System.out.println(ip+":"+data);//4.输出发送端的ip+数据包
                }       
            }
            catch (Exception e) 
            {
                throw new RuntimeException("接收端失败");
            }
        }
    }

主函数调用:

    class Chat 
    {
        public static void main(String[] args) throws Exception
        {
            DatagramSocket seSocket = new DatagramSocket();
            DatagramSocket reSocket = new DatagramSocket(10086);//接收端监听10086端口
            new Thread(new Send(seSocket)).start();
            new Thread(new Rece(reSocket)).start();
        }
    }

输出聊天结果:

  gc
  192.168.1.234:gc
  hello 寻叶亭
  192.168.1.234:hello 寻叶亭
  376
  192.168.1.234已退出聊天室

相关文章

  • 写一个简易聊天程序

    需求:编写一个聊天程序 思路:有收有发,且同时执行,需要用到多线程发送端:1.建立updsocket服务2.打包D...

  • go写的简易聊天

    学习go的小进步 默认client发送需要另一个client的ip#content的格式,这个格式自定义,过几天用...

  • java实践:Socket简易聊天程序

    服务端 客户端

  • Unity3d 制作聊天框

    在使用Unity3d开发一个简易的聊天程序时,需要在客户端显示聊天记录列表,做为一个初学者,开发这个功能具然快用了...

  • 小程序之简易聊天室

    文章说明 说明:此文章根据项目需要做的Demo,总结了一下,以备后期使用。实现的功能: 1、发送文字;2、发送文字...

  • 一个C写的简易聊天室

    近期有些空闲,正好趁着这段时间做些练手的项目巩固一些Linux下C编程:) 技术 TCP Socket编程 SYS...

  • 微信小程序开发

    简易教程 · 小程序

  • 网络编程基础(二)

    网络编程基础(二) 四、简易聊天室的实现 在下面我们以一个简易的聊天室Demo进行socket的深入理解。 (一)...

  • 简易代码编缉器的编写

    最近由于项目需要,需用 c# 写一个简易 python 代码编缉器,嵌入在 winform 程序中。需实现以下几个...

  • 学习(90)

    1.民事诉讼司法程序包括:诉讼程序、非讼程序、执行程序。 2.诉讼程序包括:普通程序、简易程序(传统上的简易程序和...

网友评论

    本文标题:写一个简易聊天程序

    本文链接:https://www.haomeiwen.com/subject/fawiqxtx.html