Java网络编程从入门到精通(14):多种多样的建立网络连接的方式
1. 自动选择IP
这种方式是最常用的。所谓自动选择IP,是指当本机有多块网卡或者在一个网卡上绑定了多个IP时,Socket类会自动为我们选择一个可用的IP。在上述6个构造方法中有4个是使用这种方法来连接服务器的。
下面的代码演示上述4种构造方法的使用:
import java.net.*;
import java.io.*;
public class MoreConnection
{
private static void closeSocket(Socket socket)
{
if (socket != null)
try
{
socket.close();
}
catch (Exception e) { }
}
public static void main(String[] args)
{
Socket socket1 = null, socket2 = null, socket3 = null, socket4 = null;
try
{
// 如果将www.ptpress.com.cn改成其它不存在的域名,将抛出UnknownHostException错误
// 测试public Socket(String host, int port)
socket1 = new Socket("www.ptpress.com.cn", 80);
System.out.println("socket1连接成功!");
// 测试public Socket(InetAddress inetaddress, int port)
socket2 = new Socket(InetAddress.getByName("www.ptpress.com.cn"), 80);
System.out.println("socket2连接成功!");
// 下面的两种建立连接的方式并不建议使用
// 测试public Socket(String host, int port, boolean stream)
socket3 = new Socket("www.ptpress.com.cn", 80, false);
System.out.println("socket3连接成功!");
// 测试public Socket(InetAddress inetaddress, int i, boolean flag)
socket4 = new Socket(InetAddress.getByName("www.ptpress.com.cn"), 80, false);
System.out.println("socket4连接成功!");
}
catch (UnknownHostException e)
{
System.out.println("UnknownHostException 被抛出!");
}
catch (IOException e)
{
System.out.println("IOException 被抛出!");
}
finally
{
closeSocket(socket1);
closeSocket(socket2);
closeSocket(socket3);
closeSocket(socket4);
}
}
}
import java.net.*;
public class MoreConnection1
{
public static void main(String[] args)
{
try
{
InetAddress localAddress1 = InetAddress.getByName("200.200.200.200");
InetAddress localAddress2 = InetAddress.getByName("192.168.18.252");
// 如果将localAddress1改成localAddress2,socket1无法连接成功
Socket socket1 = new Socket("200.200.200.4", 80, localAddress1, 0);
System.out.println("socket1连接成功!");
Socket socket2 = new Socket("www.ptpress.com.cn", 80, localAddress2, 0);
System.out.println("socket2连接成功!");
// 下面的语句将抛出一个IOException错误
Socket socket3 = new Socket("www.ptpress.com.cn", 80, localAddress1, 0);
System.out.println("socket3连接成功!");
socket1.close();
socket2.close();
socket3.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
socket2连接成功!
Connection timed out: connect
socket.connect(new InetSocketAddress(host, port));
import java.net.*;
public class MoreConnection2
{
public static void main(String[] args)
{
try
{
Socket socket1 = new Socket();
Socket socket2 = new Socket();
Socket socket3 = new Socket();
socket1.connect(new InetSocketAddress("200.200.200.4", 80));
socket1.close();
System.out.println("socket1连接成功!");
/*
将socket2绑定到192.168.18.252将产生一个IOException错误
socket2.bind(new InetSocketAddress("192.168.18.252", 0));
*/
socket2.bind(new InetSocketAddress("200.200.200.200", 0));
socket2.connect(new InetSocketAddress("200.200.200.4", 80));
socket2.close();
System.out.println("socket2连接成功!");
socket3.bind(new InetSocketAddress("192.168.18.252", 0));
socket3.connect(new InetSocketAddress("200.200.200.4", 80), 2000);
socket3.close();
System.out.println("socket3连接成功!");
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
socket2连接成功!
Connection timed out: connect
《银河系列原创教程》发布
《Java Web开发速学宝典》出版,欢迎定购
Java网络编程从入门到精通(14):多种多样的建立网络连接的方式相关推荐
- java消息头,Java网络编程从入门到精通:HTTP消息头字段
Java网络编程从入门到精通:HTTP消息头字段 一.通用头字段 1. Connection 这个字段只在HTTP1.1协议中存在.它决定了客户端和服务器进行了一次会话后, 服务器是否立即关闭网络连接 ...
- ASP网络编程从入门到精通 下载
<ASP网络编程从入门到精通> 清华大学出版社 特点: 面向ASP零基础读者,循序渐进 全面分析ASP技术细节 用代码描述个个知识点,操作性强 通过典型模块设计,体会ASP的奥妙 通过网上 ...
- Java网络编程从入门到精通(24):实现HTTP断点续传下载工具(附源代码)
源代码下载:download.rar 在前面的文章曾讨论了HTTP消息头的三个和断点继传有关的字段.一个是请求消息的字段Range,另两个是响应消息字段Accept-Ranges和Content-Ra ...
- 《 Java并发编程从入门到精通》Thread安全与不安全
作者:张振华 购买链接:天猫商城 JD商城 当当书店 鸟欲高飞先振翅,人求上进先读书.本文是原书的第3章 Thread安全3.2 什么是不线程安全.3.3什么是线程不安全. 3.2 什么是 ...
- Java网络编程从入门到精通(1):Internet地址概述
所有连入Internet的终端设备(包括计算机.PDA.打印机以及其他的电子设备)都有一个唯一的索引,这个索引被称为IP地址.现在Internet上的IP地址大多由四个字节组成,这种IP地址叫做IPv ...
- Java网络编程从入门到精通(25):创建ServerSocket对象
ServerSocket类的构造方法有四种重载形式,它们的定义如下: public ServerSocket() throws IOException public ServerSocket(int ...
- Java网络编程从入门到精通 (9):使用isXxx方法判断地址类型
IP地址分为普通地址和特殊地址.在前面的文章中所使用的大多数都是普通的IP地址,在本文中将介绍如何利用InetAddress类提供的十个方法来确定一个IP地址是否是一个特殊的IP地址. 一.isAn ...
- Java网络编程从入门到精通(4):DNS缓存
在通过DNS查找域名的过程中,可能会经过多台中间DNS服务器才能找到指定的域名,因此,在DNS服务器上查找域名是非常昂贵的操作.在Java中为了缓解这个问题,提供了DNS缓存.当InetAddress ...
- Java网络编程从入门到精通(2):创建InetAddress对象的四个静态方法
InetAddress类是Java中用于描述IP地址的类.它在java.net包中.在Java中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址.这两个类都是I ...
最新文章
- node:ORM、数据模型、脚本创建模型与服务层
- Jenkins:部署JEE工件
- mysql 子表 关联查询语句_MySQL-基本查询语句及方法,连表和子查询
- 虚拟机中安装vmware tools 到 Debian 时出现 找不到kernel headers的提示
- 给iOS开发新手送点福利,简述UIPageControl的属性和用法
- 深度linux运行浏览器中毒,使用深度Deepin系统的用户可在商店中安装360安全浏览器正式版...
- 去除winrar广告
- qt设置进程开机自启动
- oracle rac 成本及架构,Oracle Extended RAC 架构实战
- linux下delete释放不了内存,c++delete后虚拟内存不降的原因(疑似内存泄漏)
- 计算机七进制乘法,编程达人
- JDK8新特性Stream流使用详解
- 【转】Foobar 2000设置replay gain
- 计算机科学方面的学术会议
- 程序人生--2010年(60)
- 微信公众平台注册十大常见问题(公众号篇)
- 一沙一世界,一花一天堂
- Python spider (二) Requests Lxml bs4
- [COI2007] Sabor
- Java向上取整与向下取整