【图灵干货】Java高级教程第五节:Java 网络编程

发布时间:2021-10-28 17:18:25
java网络编程

第一,Java网络程序设计。
网路程式设计就是写出若干台装置(电脑)上运行的程式。
java.net包中J2SE的API包括类和接口,这些API提供了低层通信细节。您可以直接使用这些类和接口,将精力集中在解决问题上,而无需关注通信的细节。
java.net包中对两个常用网络协议的支持:
TCP:TCP是传输控制协议的简称,它可以保证两个应用程序间的可靠通信。一般在因特网协议中使用,称为TCP/IP。
UDP:UDP是用户数据报协议的简称,是无连接协议。为要在应用程序间发送的数据提供一个包。
这篇教程的重点是介绍以下两个主题。
Socket编程:这是网络中应用最广的概念,对此我们做了相当详细的解释。
URL处理:这个部分将以另一部分进行讨论,点击此处进一步学习java语言中的URL处理。

第二,Socket编程。
socket使用TCP,在两台机器间提供一种通信机制。客户机程序创建一个套接字,然后尝试连接服务器。
在连接建立后,服务器创建一个Socket对象。通过读写Socket对象并读入Socket对象,客户机和服务器现在可以通信。
java.net.Socket类表示socket,java.net.ServerSocket类为服务器程序提供一种机制来监听客户机,并将其连接到它们。
当下面的步骤用socket在两台计算机之间建立TCP连接时,将出现:
伺服器实例化一个ServerSocket对象,代表在服务器上进行通信。
该服务器调用ServerSocket类的accept()方法,该方法会一直等待直到客户机连接到服务器上给定的端口。
当服务器等待时,一个客户机实例化一个Socket对象,指定服务器名和端口号,以请求连接。
Socket类的构造器尝试将客户机连接到指定的服务器和端口号。当通讯建立后,在客户机上创建Socket对象就可以和服务器通信了。
在服务器端,accept()方法将返回服务器上一个新的socket引用,这个socket连接到客户机的socket。
一旦连接建立起来,通过使用I/O流来进行通信,每个socket都有一个输出流和输入流,客户机的输出流与服务器端的输入流相连,客户端的输入流与服务器端的输出流相连。
TCP是一种双向通信协议,所以数据可以同时通过两个数据流传送.下面是一些类为socket提供的一套完整而有用的方法。

第三,类ServerSocket的方法。
通过使用java.net.ServerSocket类获得一个端口,并监听客户机请求。
ServerSocket类有四种构造方法:

 
ServerSocket类有四种构造方法:

不受约束的服务器套接字创建。若ServerSocket构造方法未引发异常,则表示您的应用程序已成功绑定到指定端口,并监听客户机请求。
下面是ServerSocket类的一些常见方法:
ServerSocket类的一些常见方法

第四,Socket类方法。
java.net.Socket类表示了客户机和服务器用于进行通信的套接字。客户机要获取一个Socket对象,然后服务器得到一个Socket对象,然后通过accept()方法返回返回值。
Socket类有五种构造方法。

Socket构造方法返回时,Socket对象并不是真正试图连接到指定服务器和端口的简单Socket对象。
以下是一些有趣的方法,请注意,客户端和服务器端都有一个Socket对象,因此可以被客户端或服务端调用。
Socket类有五种构造方法。

第五,InetAddress类的一个方法。
该类代表了因特网协议(IP)地址。在Socket编程时,以下是一些更有用的方法:
InetAddress类的一个方法

第六,Socket客户端实例。
下面是GreetingClient,它是一个客户端程序,它通过socket连接服务器,发送请求,然后等待响应。
GreetingClient.java文件代码:

 

// 文件名 GreetingClient.java

import java.net.*;

import java.io.*;

public class GreetingClient {

public static void main(String [] args) {

String serverName = args[0];

int port = Integer.parseInt(args[1]);

try {

System.out.println("连接到主机:" + serverName + " ,端口号:" + port);

Socket client = new Socket(serverName, port);

System.out.println("远程主机地址:" + client.getRemoteSocketAddress());

OutputStream outToServer = client.getOutputStream();

DataOutputStream out = new DataOutputStream(outToServer);

out.writeUTF("Hello from " + client.getLocalSocketAddress());

InputStream inFromServer = client.getInputStream();

DataInputStream in = new DataInputStream(inFromServer);

System.out.println("服务器响应: " + in.readUTF());

client.close();

}

catch(IOException e) {

e.printStackTrace();

} } }

七、Socket 服务端实例

如下的GreetingServer 程序是一个服务器端应用程序,使用 Socket 来监听一个指定的端口。

GreetingServer.java 文件代码:

// 文件名 GreetingServer.java

import java.net.*;

import java.io.*;

public class GreetingServer extends Thread {

private ServerSocket serverSocket;

public GreetingServer(int port) throws IOException {

serverSocket = new ServerSocket(port);

serverSocket.setSoTimeout(10000);

}

public void run() {

while(true) {

try {

System.out.println("等待远程连接,端口号为:" + serverSocket.getLocalPort() + "...");

Socket server = serverSocket.accept();

System.out.println("远程主机地址:" + server.getRemoteSocketAddress());

DataInputStream in = new DataInputStream(server.getInputStream());

System.out.println(in.readUTF());

DataOutputStream out = new DataOutputStream(server.getOutputStream());

out.writeUTF("谢谢连接我:" + server.getLocalSocketAddress() + "\nGoodbye!");

server.close(); }catch(SocketTimeoutException s) {

System.out.println("Socket timed out!");

break;

}

catch(IOException e) {

e.printStackTrace(); break;

}

}

}

public static void main(String [] args) {

int port = Integer.parseInt(args[0]);

try {

Thread t = new GreetingServer(port);

t.run();

}

catch(IOException e) {

e.printStackTrace();

} } }

编译以上两个 java 文件代码,并执行以下命令来启动服务,使用端口号为 6066:

$ javac GreetingServer.java

$ java GreetingServer 6066

等待远程连接,端口号为:6066...

新开一个命令窗口,执行以上命令来开启客户端:

$ javac GreetingClient.java

$ java GreetingClient localhost 6066

连接到主机:localhost ,端口号:6066

远程主机地址:localhost/127.0.0.1:6066

服务器响应: 谢谢连接我:/127.0.0.1:6066

下一章节我们将介绍Java高级教程第六节:Java 发送邮件

图灵学院成立于2017年7月15日,现阶段提供 计算机基础原理、JavaSE核心、Java后端、 面试必备算法、python核心编程、数据分析、web 开发题、人工智能等专题课程,为想学习Python的学员提供优质的培训服务,帮助学员掌握更加全面的技能,是计算机人员职场中提职加薪的首选。
免费java架构师视频学习地址:免费视频
上一篇 【图灵干货】Java高级教程第四节:Java 序列化
下一篇 Python中类的属性有哪几种?