package 聊天;
                                              /*一切随便消逝吧*/
import java.net.DatagramSocket;
import java.net.SocketException; public class ChatDemo {
public static void main(String[] args) throws Exception { DatagramSocket send=new DatagramSocket();
DatagramSocket rece=new DatagramSocket(10001);
new Thread(new Send(send)).start();
new Thread(new Rece(rece)).start();
}
}
/*总结
* 第一步建立字节套服务。Socket
* 第二封装包 datagrampack
* 处理数据包
* 结束
*
*
* */

  

package 聊天;

/*
* udp接收端 建立udp socket 创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析这些数据
* 使用socket服务的receive方法将接收到得数据储存到数据包中 通过数据包的方法解析数据包中德数据。 关闭资源
*
*/

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket; public class Rece implements Runnable {
private DatagramSocket ds; public Rece(DatagramSocket ds) { this.ds = ds;
} @Override
public void run() { try {
while (true) {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
String text = new String(dp.getData(), 0, dp.getLength());
System.out.println(dp.getAddress().getHostAddress()+":::"+text);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

  

package 聊天;

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

/*
* 创建UDP传输的发送端 思路:建立udp的socket服务器 将要发送的数据封装到数据包中 通过udp的socket服务将数据包发送出去 关闭服务
*
*/

public class Send implements Runnable {
private DatagramSocket ds; public Send(DatagramSocket ds) { this.ds = ds;
} @Override
public void run() { try {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String line = null; while ((line = bf.readLine()) != null) { byte[] buf = line.getBytes();
// 使用DatagramPacket封装数据
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10001);
ds.send(dp);
if("886".equals(line)){
break;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
ds.close();
e.printStackTrace();
} } }

  

最新文章

  1. 使用SVN同步资源后图标样式的详细解读
  2. 网页特殊符号HTML代码大全
  3. DigitalOcean上使用Tornado+MongoDB+Nginx+Supervisor+DnsPod快速搭建个人博客
  4. Spring AOP 深入剖析
  5. 黑马程序员——vim编辑器的使用
  6. Android 多渠道打包,上百渠道,秒打签名
  7. VC各种方法获得的窗口句柄
  8. Linux下区分物理CPU、逻辑CPU和CPU核数
  9. es6 箭头函数(arrow function) 学习笔记
  10. MySQL的常用操作命令详解
  11. get请求URL的转码
  12. Navicat还原出现Finished - Stopped before completion的问题
  13. tailf、tail -f、tail -F三者区别(转)
  14. windows 匿名管道: 父进程与子进程通信 (进程间通信之CreatePipe)
  15. Vue通过id跳转到商品详情页
  16. redis哨兵模式,数据尽量少的丢失
  17. python中base64编码与解码
  18. cpu-z for ubuntu 12.04 64bit : cpu-g
  19. CS229 6.8 Neurons Networks implements of PCA ZCA and whitening
  20. ThinkPHP5分页样式设置

热门文章

  1. Python使用property函数定义的属性名与其他实例变量重名会怎么样?
  2. THE BUG 队第一次团队项目作业
  3. WPF页面刷新
  4. 题解-CF1307G Cow and Exercise
  5. 算法——K 个一组翻转链表
  6. mongodb 学习之——mongod --help 中文解释
  7. tensorflow学习笔记——DenseNet
  8. js--前端开发工作中常见的时间处理问题
  9. 【Jmeter Linux环境下运行方法】
  10. 精尽Spring MVC源码分析 - MultipartResolver 组件