Java学习笔记52(网络编程:UDP协议案例)
InetAddress类:
表示互联网中的IP地址,示例:
package demo; import java.net.InetAddress;
import java.net.UnknownHostException; public class InetAddressDemo {
public static void main(String[] args) throws UnknownHostException {
function1();
function2();
} public static void function1() throws UnknownHostException {
InetAddress inet = InetAddress.getLocalHost();
System.out.println(inet.getHostName());// 获取主机名
// 输出:DESKTOP-Q3O8AEO
System.out.println(inet.getHostAddress());// 获取主机IP
// 输出:192.168.87.1
} public static void function2() throws UnknownHostException {
// 获得其他IP
InetAddress inet = InetAddress.getByName("www.baidu.com");
System.out.println(inet);
// 输出:www.baidu.com/111.13.100.92
}
}
UDP协议:无连接通信协议,最大64KB,不安全
TCP协议:面向连接通信协议,可靠安全,三次握手以确认连接,相对速度慢,适合大数据传输
UDP示例:
发送端:
package demo; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; public class UDPSend {
public static void main(String[] args) {
try {
byte[] data = "你好".getBytes();
InetAddress inet = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(data, data.length, inet, 6000);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
ds.close();
} catch (IOException ex) {
System.out.println(ex);
}
}
}
接收端:
package demo; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket; public class UDPReceive {
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(6000);
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
ds.receive(dp);
int length = dp.getLength();
String ip = dp.getAddress().getHostAddress();
System.out.println(ip + ":" + new String(data, 0, length));
ds.close();
} catch (IOException ex) {
System.out.println(ex);
}
}
}
先运行接收端,再运行发送端,结果:
输出:127.0.0.1:你好
功能可以提升,实现键盘输入的聊天:
发送端:
package demo; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner; public class UDPSend {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
DatagramSocket ds = new DatagramSocket();
InetAddress inet = InetAddress.getByName("127.0.0.1");
while (true) {
String message = sc.nextLine();
byte[] data = message.getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length, inet, 7000);
ds.send(dp);
}
} catch (IOException ex) {
System.out.println(ex);
}
}
}
接收端:
package demo; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket; public class UDPReceive {
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(7000);
byte[] data = new byte[1024];
while (true) {
DatagramPacket dp = new DatagramPacket(data, data.length);
ds.receive(dp);
int length = dp.getLength();
String ip = dp.getAddress().getHostAddress();
System.out.println(ip + ":" + new String(data, 0, length));
}
} catch (IOException ex) {
System.out.println(ex);
}
}
}
先后运行,在发送端发送的消息可以随时在接收端收到,这里就实现了一个简单的聊天功能
同个局域网下的多台电脑之间也可以聊天,只要修改成相应的IP地址即可
Java学习笔记52(网络编程:UDP协议案例)的更多相关文章
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- Java精选笔记_网络编程
网络编程 概述 现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈. 在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(C ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- nodejs学习笔记之网络编程
了解一下OSI七层模型 OSI层 功能 TCP/IP协议 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式化 ...
- 【原】Java学习笔记034 - 网络
package cn.temptation; import java.net.InetAddress; public class Sample01 { public static void main( ...
- 7.4 (java学习笔记)网络编程之TCP
一.TCP 1.1 TCP(Transmission Control Protocol 传输控制协议),是一种面向连接的,安全的传输协议,但效率相比于UDP而言比较低. TCP传输时需要确保先建立连接 ...
- 网络编程——UDP协议和通信
第1章 UDP与TCP协议 在介绍TCP/IP结构时,提到传输层的两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是 ...
- python学习笔记11 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- python学习笔记10 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
随机推荐
- python的相对导入
最近断断续续学习flask,学到蓝本时候有点小问题卡住了,问题如下 导入包的时候py文件里使用了相对路径导入,但是这种导入方法不是很明白,就自己搜索加实验了终于有点眉目了 先定义一个包 adb包 这个 ...
- Windows云服务器购买
一直点击下一步 支付
- MySQL 5.7.9版本sql_mode=only_full_group_by
这会导致select中只能出现group by后面出现的表的字段. 其实如果使用其他表的字段,聚合函数对无法对应其他表的字段. 建议放在子查询里. 如果想打破这个规则,可以设置sql_mode变量,将 ...
- iOS之Safari调试webView/H5页面
之前做过混合开发,用的是JavaScriptCore+OC+UIWebView. Safari调试功能真的很有用,通过它可以轻松定位问题的所在,下面说说怎么调试. 开启Safari开发菜单 在Mac的 ...
- FortiGate 5.2/5.4 SSLVPN建立
1.定义源IP池 即用户通过sslvpn拨号成功后获取到的IP地址. 2.定义路由地址 即用户通过sslvpn拨号成功后允许获取到的路由表. 3.建立sslvpn portal 4.定义用户和用户组 ...
- 151. Reverse Words in a String翻转一句话中的单词
[抄题]: Given an input string, reverse the string word by word. Example: Input: "the sky is blue& ...
- swift 分组tableview 设置分区投或者尾部,隐藏默认间隔高度
1.隐藏尾部或者头部,配套使用 //注册头部id tv.register(JYWithdrawalRecordSectionView.self, forHeaderFooterViewReuseIde ...
- 20165315 2017-2018-2《Java程序设计》课程总结
20165315 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安 ...
- 微信小程序之----制作视频弹幕
1. 文件目录 使用微信, 长度单位使用 rpx 可以避免不同设备的样式调试问题 经验总结,之前一直使用px ,发现换了测试机就崩了 2. index.wxml页面设置v ...
- C# NPOI 日期格式
之前整理的NPOI导入导出Excel 在之前使用过程中没发现问题. 但是后来发现导入的文档如果有日期时间格式,导入时会有混乱 后来找了一下解决方案,最终将其中一段修改即可导入日期(导出未测试) 原因 ...