黑马程序员_java基础_UDP山寨QQ聊天
来源:互联网 发布:mac os 下载地址 编辑:程序博客网 时间:2024/05/22 06:52
通过QQ这个软件让我知道,QQ聊天就是通过IP地址、端口号和UDP传输协议,一方在发送信息,一方在接收信息。所以编写UDP山寨QQ聊天,就要了解IP地址、端口号和UDP传输协议。
一、IP地址
a、它是网络中的设备标识
b、不易记忆,可用主机名表示,两者存在映射关系
c、本机回环地址:127.0.0.1,主机名为:localhost。
IP地址:java中对应的是InetAddress类,存在于java.net包中。
二、端口号
a、用于标识进程的逻辑地址,不用进程的标识。
b、有效端口:0 ~65535,系统使用或保留的端口是:0~ 1024。
三、UDP传输协议
1、协议特点:
a、面向无连接,即将数据及源和目的封装成数据包中,不建立链接的发送
b、每个数据包的大小限制在64K之内
c、因无连接,是不可靠的协议
d、不建立连接,速度快。
2、方法:
1)创建 UDPSocket发送服务对象:
DatagramSocket(),不指定端口。DatagramSocket(int port),指定端口。
2)发送:void send(DatagramPacket p)
3)接收:void receive(DatagramPacket p)
其中DatagramPacket:数据报包用来实现无连接包投递服务的,每条报文仅根据该包中包含的信息从一台机器路由到另一台机器中。凡是带地址(InetAddress)的都是用于发送包的。
山寨QQ的代码如下:
import java.io.*;import java.net.*;class Send implements Runnable{private DatagramSocket ds;public Send(DatagramSocket ds){this.ds=ds;}//复写run方法public void run(){try{//键盘输入的数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line=null;while((line=br.readLine())!=null){//如果输入的数据是"888"就结束聊天if("888".equals(line)){break;}byte[] by =line.getBytes();//将从键盘输入的数据封装成包DatagramPacket dp = new DatagramPacket(by,by.length,InetAddress.getByName("192.168.1.116"),10006);//发送数据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[] by=new byte[1024];DatagramPacket dp=new DatagramPacket(by,by.length);//接收数据ds.receive(dp);//获取发送端主机的IP地址String ip=dp.getAddress().getHostAddress();//获取接收到的数据String data=new String(dp.getData(),0,dp.getLength());//将获取到的发送端主机的IP地址和数据打印在控制台上System.out.println(ip+"::::::"+data);}}catch (Exception e){throw new RuntimeException("接收端失败");}}}class CharDemo {public static void main(String[] args) throws Exception{//通过DatagramSocket的对象创建UDP服务DatagramSocket sendSocket = new DatagramSocket();//创建UDP服务,创建与发送相关的端口DatagramSocket receiveSocket = new DatagramSocket(10003);Send s = new Send(sendSocket);Receive r= new Receive(receiveSocket);//创建线程Thread t = new Thread(s);Thread th=new Thread(r);//开启线程t.start();th.start();}}
- 黑马程序员_java基础_UDP山寨QQ聊天
- 黑马程序员_Java基础_网络编程_UDP传输协议编程,控制台聊天程序
- 黑马程序员_java语言_UDP
- 黑马程序员_udp
- 黑马程序员_UDP传输
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_java 基础
- 黑马程序员_java基础
- 黑马程序员_Java基础
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_Java基础
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_Java基础
- 使用 CSS3 实现 3D 图片滑块效果
- play教程 第八课 Model的用法 play中的JPA
- Java常用排序算法
- 触发器
- VMware Workstation中安装64位linux
- 黑马程序员_java基础_UDP山寨QQ聊天
- 解决IDEA自动重置LanguageLevel和JavaCompiler版本的问题
- LeetCode -- Fraction to Recurring Decimal
- 文章标题
- 网络端口查看命令-netstat/nmap
- VS 2013 DataTimePicker的初始化
- Eclipse中查找接口实现类快捷键
- java__网络编程01
- iOS 使用UIDocumentInteractionController类打开文件