当前位置:   article > 正文

java实现套接字网络编程_Java网络编程(一)Socket套接字

java 套接字 "eprt |2|" + addr.gethostaddress() + "|" + (iport & 0xff) + "|";

一、基础知识

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/895736
推荐阅读
相关标签
  

闽ICP备14008679号