------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——(十)网络编程的更多相关文章

  1. 二十三、Java基础--------网络编程

    Java中另一个重要技术就是网络编程了,为了更好的学习web方向的知识,有必要对java之网络编程好好学习,本文将围绕网络编程技术进行分析. 常见的网络协议:UDP.TCP UDP 1. 将数据源和目 ...

  2. JAVA的网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  3. Java Socket 网络编程心跳设计概念

    Java Socket 网络编程心跳设计概念   1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...

  4. 20145325张梓靖 实验五 "JAVA的网络编程"

    20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...

  5. 【转】JAVA之网络编程

    转自:火之光 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者 ...

  6. JAVA的网络编程【转】

    JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...

  7. Java面向对象 网络编程 下

    Java面向对象 网络编程  下 知识概要:                   (1)Tcp 练习 (2)客户端向服务端上传一个图片. (3) 请求登陆 (4)url 需求:上传图片. 客户端:   ...

  8. Java面向对象 网络编程 上

     Java面向对象 网络编程 上 知识概要:                     (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...

  9. Java基础——网络编程(二)

    一.套接字 Socket 网络驱动程序提供给应用程序编程的接口和一种机制,可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送.它在应用程序中创建,通过一种绑定机制与驱动程序建立关系, ...

  10. java基础-网络编程(Socket)技术选型入门之NIO技术

    java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...

随机推荐

  1. 关于scroll无法绑定的问题

    关于jQuery的scroll([[data],fn])事件, 概述是:当用户滚动指定的元素(元素包括:所有可滚动的元素和 window 对象)时,会触发该事件. 如绑定窗口对象: $(window) ...

  2. For Aisha(阿伊莎)

    相见时难别亦难,东风无力百花残.by:昂思多,20160524 跟你在一起,没有拘束感,完全就像是在跟亲人对话. 很喜欢这种感觉 虽然才认识不到10天,却就像是认识了好几年的老朋友 真的喜欢叫你“阿伊 ...

  3. 如何从 Xcode 控制台输出 JavaScript 的 log?

    调试 UIWebView 中的 JavaScript 一直以来都是很痛苦的一件事.通常我们会通过下面的方法调试 HTML 和 JavaScript. 1.第一种,使用桌面浏览器调试.大多数现代浏览器都 ...

  4. Hibernate 使用注解后没发现建表

    可能的原因: ①该注解类中的注解出错:例如是否因为属性名与数据库关键字冲突 ②是否添加包扫描配置: <property name="packagesToScan" value ...

  5. hOAuth2.0认证和授权原理

    原文地址: http://www.6zou.net/tech/what_is_oauth.html http://www.phpddt.com/%E4%BA%8C%E6%AC%A1%E5%BC%80% ...

  6. c++调用ffmpeg

    在自己编译好ffmpeg库后,已经迫不及待的想尝试用vs2010来调用ffmpeg,在开始调用的时候遇到了些问题,但还是解决了. 配置vs 1.右键工程-属性,在然后选择 配置属性 -> C/C ...

  7. 如何在sourcetree 下提交代码到gerrit上

    gerrit的审核机制决定了提交到远程到代码并非远程master分支,而是/refs/for/master 分支,所以需要解决怎么在sourcetree下提交代码到/refs/for/master分支 ...

  8. 【HDOJ】1325 Is It A Tree?

    并查集.需要考虑入度. #include <stdio.h> #include <string.h> #define MAXNUM 10005 int bin[MAXNUM]; ...

  9. Android MonkeyRunner自动拨打电话

    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice import time device = MonkeyRunner.wa ...

  10. 如何查看jar包的版本号?

    jar包根目录里的META-INF目录下的MANIFEST.MF文件里一般有会记录版本信息,可以到这个文件里查看   打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个 ...