赞
踩
一、基础知识
1.TCP:传输控制协议。
2.UDP:用户数据报协议。
二、IP地址封装
1.InetAddress类的常用方法
getLocalHost() 返回本地主机的InetAddress对象 InetAddress类型
getByName(String host) 获取指定主机名称的IP地址 InetAddress类型
getHostName() 获取此主机名 String
getHostAddress() 获取主机IP地址 String
isReachable(int timeout) 在timeout指定的毫秒时间内,测试IP地址是否可达 Boolean
2.示例1:测试IP地址从“192.168.131.1”到“192.168.131.150”范围内所有可以访问的主机的名称,如果对方没有安装防火墙,并且网络连接正常的话,都可以访问的。从输出可以看出,192.168.131.1是本地主机的IP,其他地址都不能联通,可能是因为1000毫秒太短或者对方主机装有防火墙的原因。
packagebigjunoba.bjtu.iptoname;importjava.io.IOException;importjava.net.InetAddress;importjava.net.UnknownHostException;public classIPToName {public static voidmain(String[] args) {
String IP= null;for (int i = 1; i <= 150; i++) {
IP= "192.168.131." + i; //生成IP字符串
try{
InetAddress host;
host= InetAddress.getByName(IP); //获取IP封装对象
if (host.isReachable(1000)) { //用1秒的时间测试IP地址是否可达
String hostName =host.getHostName();
System.out.println("IP地址" + IP + "的主机名称是:" +hostName);
}
}catch (UnknownHostException e) { //捕获未知主机异常
e.printStackTrace();
}catch (IOException e) { //捕获输入输出异常
e.printStackTrace();
}
}
System.out.println("搜索完毕!");
}
}
IP地址192.168.131.1的主机名称是:BigjunOba
搜索完毕!
三、套接字
套接字(Socket)是代表计算机之间网络连接的对象,用于建立计算机之间的TCP连接,使计算机之间可以建立连接并实现网络通信。
1.服务器端套接字
服务器端套接字是SercerSocket类的实例对象,用于实现服务器缓存。ServerSocket类将监视指定的端口,并建立客户端到服务器端套接字的连接,也就是客户负责呼叫任务。
(1)创建服务器端套接字
创建服务器端套接字可以使用4种构造方法。
①ServerScoket()
默认构造方法,可以创建未绑定端口号的服务器套接字。服务器套接字的所有构造方法都需要处理IOException异常。
一般格式为:
try{
ServerSocket server= newServerSocket();
}catch(IOException e) {
e.printStackTrace();
}
②ServerScoket(int port)
该构造方法将创建绑定到port参数指定端口的服务器套接字对象,默认的最大连接队列长度为50,也就是说哦如果连接数量超过50个,将不会再接收新的连接请求。
一般格式为:
try{
ServerSocket server= new ServerSocket(9527);
}catch(IOException e) {
e.printStackTrace();
}
}
③ServerScoket(int port, int backlog)
使用port参数指定的端口号和backlog参数指定的最大连接长度创建服务器端套接字对象,这个构造方法可以指定超出50的连接数量,如300。
一般格式为:
try{
ServerSocket server= new ServerSocket(9527, 300);
}catch(IOException e) {
e.printStackTrace();
}
}
④public ServerSocket(int port, int backlog, InerAddress bindAddr)
使用port参数指定的端口号和backlog参数指定的最大连接队列长度创建服务器端套接字对象。如果服务器有多个IP地址,可以使用bindAddr参数指定创建服务器套接字的地址;如果服务器只有一个IP地址,那么没有必要使用该构造方法。
try{
InetAddress address = InetAddress.getByName("192.168.1.128");
ServerSocket server= new ServerSocket(9527, 300, address);
}catch(IOException e) {
e.printStackTrace();
}
}
(2)接收客户端套接字连接
当服务器建立ServerSocket套接字对象以后,就可以使用该对象的accept()方法接收客户端请求的套接字连接。
语法格式为:
serverSocket.accept();
该方法被调用之后,将等待客户端的连接请求,在接收客户端的套接字连接请求以后,该方法将返回Socket对象,这个Socket对象是已经和客户端建立好连接的套接字,通过这个Socket对象获取客户端的输入输出流来实现数据发送与接收。
该方法可能会产生IOException异常,所以在调用accept()方法时必须捕获并处理该异常。
一般形式为:
try{
server,accept();
}catch(IOException e) {
e.printStackTrace();
}
}
accept()方法将阻塞当前线程,直到接收到客户端的连接请求为止,该方法之后的任何语句都不会执行,必须有客户端发送连接请求;accpet()方法返回Socket套接字以后,当前线程才会继续运行,accpet()方法之后的代码才会被执行。
示例1:System.out.println("已经建立连接!");在server对象接收到客户端的连接请求之前永远都不会执行,这样会导致程序的main主线程阻塞。
packagebigjunoba.bjtu.serverSocketTest;importjava.io.IOException;importjava.ne
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。