• 通过socket和Udp协议简单实现一个群体聊天工具(控制台)


    编写一个聊天程序。
    有收数据的部分 和 发数据的部分。
    这两个部分需要同时执行,
    这就用到多线程技术,
    一个线程负责收,一个现象负责发。

    因为收和发动作是不一致的,所以要定义两个run方法
    而且这两个方法要封装到不同类中。

    import java.net.*;
    import java.io.*;
    

    发送端:

    class Send implements Runnable
    {
    	private DatagramSocket ds;
    	public Send(DatagramSocket ds)
    	{
    		this.ds=ds;
    	}
    	public void run()
    	{
    		try
    		{
    			BufferedReader bufr=
    				new BufferedReader(new InputStreamReader(System.in));
    			String line=null;
    
    			while((line=bufr.readLine())!=null)
    			{
    				if ("886".equals(line))
    					break;
    
    				byte[] buf=line.getBytes();
    
    				DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.102"),10002);
    				//DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10002);
    				
    				ds.send(dp);
    			}
    		
    		}
    		catch (Exception e)
    		{
    			throw new RuntimeException("发送失败");
    		}
    	}
    }
    

    接收端:

    class Receive implements Runnable
    {
    	private DatagramSocket ds;
    	public Receive(DatagramSocket ds)
    	{
    		this.ds=ds;
    	}
    	public void run()
    	{
    		try
    		{
    			//循环接收
    			while (true)
    			{
    				byte[] buf=new byte[1024];
    
    				DatagramPacket dp=new DatagramPacket(buf,buf.length);
    				
    				ds.receive(dp);
    				
    				String ip=dp.getAddress().getHostAddress();
    				
    				String data=new String (dp.getData(),0,dp.getLength());
    
    				System.out.println(ip+":"+data);
    
    			}
    		}
    		catch (Exception e)
    		{
    			throw new RuntimeException("接收失败");
    		}
    	}
    
    }
    

    主函数:

    class ChatDemo
    {
    	public static void main(String[] args) throws Exception
    	{
    		DatagramSocket sendSocket=new DatagramSocket();
    		DatagramSocket receiveSocket=new DatagramSocket(10002);
    
    		new Thread(new Send(sendSocket)).start();
    		new Thread(new Receive(receiveSocket)).start();
    	}
    }
    

      

  • 相关阅读:
    mysql配置图解(mysql 5.5)
    C++中的enum
    vc6.0中的dsp,dsw,ncb,opt,clw,plg,aps等文件的简单说明
    using namespace std
    C#中Cache的使用 迎客
    数据库里的存储过程和事务有什么区别? 迎客
    WINDOWS远程默认端口3389的正确修改方式 迎客
    DES加密和解密PHP,Java,ObjectC统一的方法 迎客
    转:15点 老外聊iPhone游戏开发注意事项 迎客
    windows server 2003 删除默认共享 迎客
  • 原文地址:https://www.cnblogs.com/xiangyangzhu/p/ChatUdp.html
Copyright © 2020-2023  润新知