Java核心技术-网络-创新互联

套接字

使用java连接到服务器

成都创新互联公司为企业级客户提高一站式互联网+设计服务,主要包括做网站、网站建设、app软件开发公司重庆小程序开发公司、宣传片制作、LOGO设计等,帮助客户快速提升营销能力和企业形象,创新互联各部门都有经验丰富的经验,可以确保每一个作品的质量和创作周期,同时每年都有很多新员工加入,为我们带来大量新的创意。 
public static void main(String[] args) throws IOException {try (
        Socket socket = new Socket("time-a.nist.gov", 13);
        Scanner scanner = new Scanner(socket.getInputStream())
    ){while (scanner.hasNextLine()) {String line = scanner.nextLine();
            System.out.println(line);
        }
    }
}

设置超时时间

socket.setSoTimeout(10000);

new Socket(host, port)这个方法会一直地阻塞下去,直到建立了到达主机地初始连接为止。可以通过先构建一个无连接地套接字,然后再使用一个超时来进行拦截地方式解决这个问题。

Socket socket = new Socket();
socket.connect(new InetSocketAddress(host, port), timeout);

静态地getByName方法可以返回代表某个主机地InetAddress对象。如:

InetAddress address = InetAddress.getByName("time-a.nist.gov");
String hostAddress = address.getHostAddress();

如果主机名对应多个因特网地址,当访问主机时,随随机选取其中一个,可以通过getAllByName方法获得所有主机。

InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com");
for (InetAddress inetAddress : allByName) {System.out.println(inetAddress.getHostAddress());
}

获取本机地址

InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost.getHostAddress());
服务器套接字

一旦启动了服务器程序,它便会等待某个客户端连接到它的接口。

ServerSocket serverSocket = new ServerSocket(8189);

用于建立一个负责监控端口8189的服务器

Socket accept = serverSocket.accept();

一旦有人通过网络发送了正确的连接请求,并以此连接到了端口上,该方法就会返回一个表示连接已经建立的Socket对象。我们可以使用这个对象来得到输入流和输出流。

InputStream inputStream = accept.getInputStream();
OutputStream outputStream = accept.getOutputStream();

服务器发送给服务器输出流的所有信息都会成为哭护短程序的输入,同时来自客户端程序的所有输出都会被包含在服务器输入流中。我们可以将流转换成扫描器和写入器。

Scanner in = new Scanner(inputStream);
PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream));

完整代码

public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8189);
    Socket accept = serverSocket.accept();

    InputStream inputStream = accept.getInputStream();
    OutputStream outputStream = accept.getOutputStream();
    Scanner in = new Scanner(inputStream);
    PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream), true);
    //out.println("ljq");
    boolean done = false;
    while (!done && in.hasNextLine()) {String line = in.nextLine();
        out.println("ljq: " + line);
        if (line.trim().equals("no")) done = true;
    }
    accept.close();
}

半关闭

套接字连接的一端可以终止其输出,同时仍旧可以接收来自另一端的数据。可以通过关闭一个套接字的输出流来表示发送给服务器的请求数据已经结束,但是必须保持输入流处于打开状态。

Socket accept = serverSocket.accept();
accept.shutdownOutput();
获取web数据URLURI

URLURLConnection类封装了大量复杂的实现细节,这些细节涉及如何从远程站点获取信息。

URL url = new URL("urlString");

如果只是想获得该资源的内容,可以使用URL类中的openStream方法。该方法将产生一个InputStream对象,然后就可以按照一般的用法来使用这个对象了,如下所示:

URL url = new URL("urlString");
InputStream inputStream = url.openStream();
Scanner scanner = new Scanner(inputStream);

java.netURL(统一资源定位符)和URI(统一资源标识符)进行了非常有用的区分。

URI是个纯粹的语法结构,包含用来指定Web资源的字符串的各种组成部分。URLURI的一个特例,它包含了用于定位Web资源的足够信息。

javaURI类不能用于访问资源,它的唯一作用就是解析。但是,URL类可以打开一个连接到资源的流。因此URL类只能用于那些java类库知道该如何处理的模式,如httphttpsftp等等。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前文章:Java核心技术-网络-创新互联
网页URL:http://myzitong.com/article/igdpp.html