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 ...
随机推荐
- WCF SOAP
WCF SOAP服务端解析 ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Cor ...
- 学习Swift -- 泛型
泛型 泛型代码可以让你写出根据自我需求定义.适用于任何类型的,灵活且可重用的函数和类型.它的可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图. 泛型所解决的问题 先来看一个交换两个int ...
- "Invalid bound statement (not found): com.sitech.admin.dao.TbOpenAbilityInfoDao.findAbilityReadyUp"mybatis配置文件bug
问题描述: 通常在正常启动某项工程后操作某个功能时抛出的bug: org.apache.ibatis.binding.BindingException: Invalid bound statement ...
- 使用spm build 批量打包压缩seajs 代码
一,安装环境 1.安装spm spm工具是基于node(nodejs的服务平台)的,因此我们需要先安装 node 和 npm 下载地址:http://nodejs.org/#download.下载完成 ...
- 【Ireport】利用Ireport5.2的table组件迅速制作表格导出pdf
转载请注明网址.Ireport table dataset Ireport在半年前还是4.7,今天无意发现,居然出到了5.2就搞一把. 首先,去下载Ireport,并进行安装.这个我就不演示了.下载完 ...
- Mozilla正在SpiderMonkey中测试JavaScript并行计算
Mozilla正致力于实现JavaScript“并行(parallelism)计算”,以便充分利用硬件性能.Dave Herman是Mozilla Research的首席研究员和策略总监.近日,他在一 ...
- Student's Morning
sgu242:http://acm.sgu.ru/problem.php?contest=0&problem=242 题意:把n个人分到m组,每一组至少2个人,每个人只能属于一个组.一开始把题 ...
- Dining
poj3281:http://poj.org/problem?id=3281 题意:有n个人,然后有F份食物,D份饮料,然后每一个会有一些喜爱的饮料和食物,问你最多可以使得多少人同时得到一份自己喜爱的 ...
- 【 POJ - 3801】Crazy Circuits(有源汇、上下界最小流)
Description You’ve just built a circuit board for your new robot, and now you need to power it. Your ...
- 基于springMVC+springSecurity3.x+Mybaits3.x的权限系统,,开放源码,支持开源
原文地址:http://blog.csdn.net/mmm333zzz/article/details/16863543/