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

来源:互联网 发布:letstee什么档次知乎 编辑:程序博客网 时间:2024/05/19 17:25

---------------------- 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 0
原创粉丝点击