Java——(十)网络编程
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、Java的基本网络支持
Java为网络支持提供了java.net包,该包下的URL和URLConnection等类提供了以编程方式访问Web服务的功能,
而URLDecoder和URLEncoder则提供了普通字符串和application/x-www-form-urlencoded MIME相互转换的静态
方法。
1.使用InetAdress
Java提供了InetAdress类来代表IP地址,InetAdress下还有两个子类:Inet4Address、Inet6Adress。InetAdress
类没有提供构造器,而是提供了如下两个静态方法来获取InetAdress实例。
1)getByName(String host):根据主机获取对应的InetAdress对象。
2)getByAddress(byte[] addr):根据原始IP地址来获取对应的InetAdress对象。
3)getLocalHost():根据本机IP地址来获取对应的InetAdress对象。
InetAdress还提供了如下三个方法来获取InetAdress实例对应的IP地址和主机名。
3)String getCanonicalHostName():获取此IP地址的全限定域名。
4)String getHostAddress():返回该InetAdress实例对应的IP地址字符串。
5)String getHostName():获取此IP地址的主机名。
6)boolean isReachable(int timeout):用于测试是否可到达该地址。
下面程序测试了InetAdress类的简单用法。
package com.socket; import java.net.InetAddress; public class InetAddressTest { public static void main(String[] args) throws Exception { // 根据主机名来获取对应的InetAddress实例
InetAddress ipAddress = InetAddress
.getByName("www.4399.com");
//判断是否可达
System.out.println("4399网址是否可达:" + ipAddress.isReachable());
//获取该InetAdress实例的IP字符串
System.out.println(ipAddress.getHostAddress());
//获取本机IP地址对应的InetAdress实例
System.out.println("本机IP:"+ InetAddress.getLocalHost());
//根据原始IP地址来获取对应的InetAdress实例
InetAddress local = InetAddress.getByAddress(new byte[]{,,,});
System.out.println("本机是否可达:" + local.isReachable());
//获取该InetAdress实例对应的全限定域名
System.out.println(local.getCanonicalHostName());
} }
运行结果:
4399网址是否可达:true
175.43.124.195
本机IP:XiongXueSong/192.168.1.113
本机是否可达:true
127.0.0.1
2.使用URLDecoder和URLEncoder
URLDecoder和URLEncoder用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的
相互转换。
在介绍application/x-www-form-urlencoded MIME字符串之前,现在浏览器搜索关键字“黑马程序员”,将看到
下图所示界面。
从图中可以看出当我们所示的关键字包含中文时,这些关键字就会变成如上图所示的“乱码”——这就是所谓的
application/x-www-form-urlencoded MIME字符串。
当URL地址里包含非西欧字符的字符串时,系统就会将这些非西欧字符串转换成上图所示的特殊字符串。这就
需要使用URLDecoder和URLEncoder类。
1)URLDecoder类包含一个decode(String s, String enc)静态方法,它可以将看上去是乱码的特殊字符串转换
成普通字符串。
2)URLEncoder类包含一个encode(String s, String enc)静态方法,它可以将普通字符串转换成
application/x-www-form-urlencoded MIME字符串。
下面程序示范了将上图所示地址栏中的“乱码”转换成普通字符串,并示范了如何将普通字符串转换成
application/x-www-form-urlencoded MIME字符串。
package com.socket; import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder; public class URLDecoderTest { public static void main(String[] args) throws UnsupportedEncodingException { // 将application/x-www-form-urlencoded MIME字符串转换成普通字符串
String keyString = URLDecoder.decode(
"%E9%BB%91%E9%A9%AC%E7%A8%8B%E5%BA%8F%E5%91%98", "UTF-8");
System.out.println(keyString);
//将普通字符串转换成application/x-www-form-urlencoded MIME字符串
String urlString = URLEncoder.encode("黑马程序员", "UTF-8");
System.out.println(urlString);
} }
运行结果:
黑马程序员
%E9%BB%%E9%A9%AC%E7%A8%8B%E5%BA%8F%E5%%
提示:
包含中文字符串的普通字符串需要转换,转换方法是每个中文字符串栈2个字节,每个字节可以转换成
2个十六进制的数组,所以每个中文字符将转换成“%XX%XX”的形式。
3.使用URLhURLConnection
URL对象代表统一资源定位器,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以
是对更为复杂的引用。通常情况下,URL可以由协议名、主机、端口和资源组成,即满足如下格式:
protocol://host:port/resourceName
例如如下的URL地址:
http://www.4399.com
3.TCP编程
客户端:
package TCPDemo; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket; public class TCPClient { public static void main(String[] args) throws IOException { //创建TCP客户端服务
Socket s = new Socket("localhost", 8000);
//
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = br.readLine()) != null) {
if ("over".equals(line)) {
break;
}
OutputStream out = s.getOutputStream();
out.write(line.getBytes()); byte[] buf = new byte[1024];
InputStream in = s.getInputStream();
in = s.getInputStream();
int len = in.read(buf);
String text = new String(buf, 0, len);
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + ": " + text);
} } }
服务端:
package TCPDemo; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TCPServer { public static void main(String[] args) throws IOException { //创建服务器套接字,端口号必须明确
ServerSocket serverSocket = new ServerSocket(8000); //监听来自客户端的套接字
Socket socket = serverSocket.accept();
while (true) {
try { String ip = socket.getInetAddress().getHostAddress();
byte[] buf = new byte[1024]; InputStream in = socket.getInputStream();
int len = in.read(buf);
String text = new String(buf, 0, len);
System.out.println(ip + ":" + text); OutputStream out = socket.getOutputStream();
out.write("已连接".getBytes());
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
} }
} }
运行结果:
4.UDP编程
客户端
package TCPDemo; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TCPServer { public static void main(String[] args) throws IOException { //创建服务器套接字,端口号必须明确
ServerSocket serverSocket = new ServerSocket(8000); while (true) {
//监听来自客户端的套接字
try {
Socket socket = serverSocket.accept(); String ip = socket.getInetAddress().getHostAddress();
byte[] buf = new byte[1024]; InputStream in = socket.getInputStream();
int len = in.read(buf);
String text = new String(buf, 0, len);
System.out.println(ip + ":" + text); OutputStream out = socket.getOutputStream();
out.write("已连接".getBytes());
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
} }
} }
服务端
package UDPDemo; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket; public class UDPServer { public static void main(String[] args) throws IOException {
System.out.println("开启Server。。。。。"); //建立接收端的UDPSocket服务,必须明确端口号
DatagramSocket ds = new DatagramSocket(8888);
while (true) { //创建数据包
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//使用接收方法将接收到的数据存储到数据包中
ds.receive(dp);
//对数据进行解析
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(), 0 , dp.getLength());
System.out.println(ip + ": " + port + ": " + text);
}
} }
运行结果:
Java——(十)网络编程的更多相关文章
- 二十三、Java基础--------网络编程
Java中另一个重要技术就是网络编程了,为了更好的学习web方向的知识,有必要对java之网络编程好好学习,本文将围绕网络编程技术进行分析. 常见的网络协议:UDP.TCP UDP 1. 将数据源和目 ...
- JAVA的网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- Java Socket 网络编程心跳设计概念
Java Socket 网络编程心跳设计概念 1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...
- 20145325张梓靖 实验五 "JAVA的网络编程"
20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...
- 【转】JAVA之网络编程
转自:火之光 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者 ...
- JAVA的网络编程【转】
JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...
- Java面向对象 网络编程 下
Java面向对象 网络编程 下 知识概要: (1)Tcp 练习 (2)客户端向服务端上传一个图片. (3) 请求登陆 (4)url 需求:上传图片. 客户端: ...
- Java面向对象 网络编程 上
Java面向对象 网络编程 上 知识概要: (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...
- Java基础——网络编程(二)
一.套接字 Socket 网络驱动程序提供给应用程序编程的接口和一种机制,可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送.它在应用程序中创建,通过一种绑定机制与驱动程序建立关系, ...
- java基础-网络编程(Socket)技术选型入门之NIO技术
java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...
随机推荐
- 转:靠谱的代码和DRY
http://www.cppblog.com/vczh/archive/2014/07/15/207658.html 靠谱的代码和DRY 上次有人来要求我写一篇文章谈谈什么代码才是好代码,是谁我已经忘 ...
- bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度
1223: [HNOI2002]Kathy函数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 207 Solved: 90[Submit][Stat ...
- MEMS Gyroscope Technology
InvenSense®Technology Overview Our technology is comprised of five coreelements: our patented Nasiri ...
- Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别
首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库 ...
- JVM参数配置大全
前阵子遇到几个面试题都是关于对Java内存控制的,因此从网上找到这篇文章,希望自己对Java的内存分配有重新的认识 /usr/local/jdk/bin/java -Dresin.home=/usr/ ...
- Intervals(差分约束)
http://poj.org/problem?id=1201 题意:给出N个整数区间[ai,bi],并且给出一个约束ci,( 1<= ci <= bi-ai+1),使得数组Z在区间[ai, ...
- bzoj3631
其实这道题其实可以转化为这样一个问题 给定n-1对点,将这两点x,y间简单路径上的点(包括起点终点)权值+1 (最后再把除了起点外的点的权值-1,注意终点没糖吃) 求每个点的权值 首先想到的是先找LC ...
- [BZOJ2173]整数的lqp拆分
[题目描述] lqp在为出题而烦恼,他完全没有头绪,好烦啊… 他首先想到了整数拆分.整数拆分是个很有趣的问题.给你一个正整数N,对于N的一个整数拆分就是满足任意m>0,a1 ,a2 ,a3…am ...
- windows 7 下 BCGControlBar 的安装破解
一定要以管理员权限启动,否则没有注册码输入框,不能破解,折腾我好几遍 谨记
- Xamarin最新crack 包含IOS
Xamarin.Android 4.10.01068 & Xamarin.iOS 1.8.361 28 Comments tweet inShare NEW support f ...