黑马程序员 ---------- Java 网络基础 基于UDP 模仿QQ

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


        

使用自己的学习的知识,做点自己喜欢的东西,感悟良多啊。很多事情不是子讲的那么简单的实现。原来,自己不懂的,有的时候一个顿悟就 豁然开朗的感觉的确妙不可言啊。哈哈

        不多废话,分享一下我写的仿照的QQ,没有界面,基于Dos 命令行的,也可以用 Eclispe 都行的!

使用方法:先开启 服务端,等待即可。 之后开启 客户端,可以开启多个客户端!


代码如下:

客户端代码:


package stu.love.qq;




import java.net.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramSocket;

/**
 *  单项的发送信息,将发送的信息 打印在控制台上。
 *  当你在控制台输入  over 的时候,程序结束;
 * 
 * */

/**
 * 
 * 需求:
 *    编写一个聊天程序!
 * 1 接收数据 发送数据
 * 这两个部分需要 同时执行!
 * 就需要用到 多线程技术!
 * 一个 线程 控制 发送数据,一个线程控制 接受数据!
 *  
 * 因为 接收和发送 动作是不一致的!
 * 所以 要定义两个 run()
 * 而且这两个方法,要封装到 不同的类中! 
 * 
 * 
 * */


// 客户端
class Client1 implements Runnable
{
  //成员变量
  private DatagramSocket ds;
  //成员函数
  public Client1(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)
     {
//    	 接收到到 886 应该是 服务端处理吧!
//    	在此处直接退出不合适吧!
     /*  if("886".equals(line))
         break;*/
       
//       获取输入的信息 得到  字节码
       byte[] buf = line.getBytes();
//       将数据封装成 数据报    并指明 IP 和 端口!
       DatagramPacket dp = 
          new DatagramPacket(buf,buf.length,InetAddress.getByName("localhost"),10012);
         
//       发送数据
       ds.send(dp);
     }
     
    } catch (Exception e) {
     throw new RuntimeException("发送端失败!");
     // TODO: handle exception
    }
    
  }
}



 



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

    DatagramSocket sendSocket = new DatagramSocket();
    
    new Thread(new Client1(sendSocket)).start();
    
  }

}
 



服务端代码:

package stu.love.qq;




import java.net.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramSocket;

/**
 *  单项的发送信息,将发送的信息 打印在控制台上。
 *  当你在控制台输入  over 的时候,程序结束;
 * 
 * */

/**
 * 
 * 需求:
 *    编写一个聊天程序!
 * 1 接收数据 发送数据
 * 这两个部分需要 同时执行!
 * 就需要用到 多线程技术!
 * 一个 线程 控制 发送数据,一个线程控制 接受数据!
 *  
 * 因为 接收和发送 动作是不一致的!
 * 所以 要定义两个 run()
 * 而且这两个方法,要封装到 不同的类中! 
 * 
 * 
 * */


/*
//接收端 服务端
 * 
 * 服务 处理 客户端 发送的 数据请求!
 * 
*/
class Server1 implements Runnable
{
  //成员变量
  private DatagramSocket ds = null;
  
  //构造函数
  public Server1(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);
       
       //先拿 IP 地址
       String ip = dp.getAddress().getHostAddress();
       String data = new String(dp.getData(),0,dp.getLength());
       
//     在服务器断 处理一下 客户端的退处
	   if(data.contains("over"))
	     {
	  	   System.out.println(ip+"........"+ "退出登录!");
	     }
       System.out.println(ip+"::"+data);
       
     }
     
     
    } catch (Exception e) {
     throw new RuntimeException("接收端失败!");
     // TODO: handle exception
    }
    
  }
}

 



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

    DatagramSocket receSocket = new DatagramSocket(10012);
    
    new Thread(new Server1(receSocket)).start();
    
  }

}
 




下面是效果图:








---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
详细请查看:www.itheima.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值