Java教程

JAVA 网络编程基础

本文主要是介绍JAVA 网络编程基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

JAVA 网络编程基础

一,前言

​ 了解计算机网络的概述,掌握Sokcet类编程,ServerSocket类,Socket类的构造方法和常用方法

二,计算机网咯

1.概述

​ 计算机网络计算机们组成的网络,同一个网络中,计算机可以直接通信,因为计算机都需遵循同一种网络协议。

​ 互联网是网络的网络(internet),即把很多计算机网络连接起来,形成一个全球统一的互联网。

​ 某个计算机网络,可能使用网络协议ABC,而另一个可能使用网络协议XYZ。如通讯协议不统一,则无法连接形成互联网。统一使用TCP/IP协议。

TCP/IP协议:

​ 泛指互联网协议,其中最重要的两个协议是TCP协议和IP协议。只有使用TCP/IP协议的计算机才能够联入互联网,使用其他网络协议(例如NetBIOS、AppleTalk协议等)是无法联入互联网的。

2.IP地址

​ 在互联网中,一个IP地址用于唯一标识一个网络接口(Network Interface)。一台联入互联网的计算机至少有一个IP地址,或多个IP地址。

​ IP地址分为IPv4和IPv6两种。

  • IPv4

IPv4采用32位地址,类似101.202.99.12,IPv4地址总共有232个(大约42亿),IPv4的地址目前已耗尽。

  • IPv6

而IPv6采用128位地址,类似2001:0DA8:100A:0000:0000:1020:F2F3:1428,IPv6地址则总共有2128个(大约340万亿亿亿亿),而IPv6的地址是根本用不完的。

有一个特殊的IP地址,称之为本机地址,它总是:127.0.0.1(localhost)。

3.域名

​ 直接记忆IP地址困难,通常使用域名访问某个特定的服务。域名解析服务器DNS负责把域名翻译成对应的IP,客户端再根据IP地址访问服务器。

​ 在cmd中用nslookup可以查看域名对应的IP地址

​ 有一个特殊的本机域名localhost

4.常用协议

TCP协议:

​ 是应用最广泛的协议,许多高级协议都是建立在TCP协议之上的,例如HTTP、SMTP等。

UDP协议(User Datagram Protocol):

​ 是一种数据报文协议,它是无连接协议,不保证可靠传输。

三,TCP编程

​ 在开发网络应用程序的时候,我们又会遇到Socket这个概念。

​ Socket、TCP和部分IP的功能都是由操作系统提供的,不同的编程语言只是提供了对操作系统调用的简单的封装。

​ Socket就是由IP地址和端口号(范围是0~65535)组成,可以把Socket简单理解为IP地址加端口号。

​ 端口号由操作系统分配,特权端口(小于1024)需管理员权限,普通端口(大于1024)任意用户的应用程序打开。

​ 比如mysql端口: 127.0.0.1:3306

四,Socket编程

​ Java提供的网络类库(java.net),可以实现无缝的网络连接

​ 使用Socket进行网络编程时,本质上就是两个进程之间的网络通信。

​ 一个进程服务器端,它会主动监听某个指定的端口。一个客户端,它必须主动连接服务器的IP地址和指定端口,如果连接成功,服务器端和客户端就成功地建立了一个TCP连接,双方后续就可以随时发送和接收数据。

1.ServerSocket类

构造方法:

//创建绑定到指定端口的服务器套接字。
ServerSocket(int port)

常用方法:

Socket accept() throws IOException
	//等待客户端的连接请求,返回与该客户端进行通信用的Socket对象
void setSoTimeout(int timeout) throws SocketException 
	//设置accept()方法等待连接的时间为timeout毫秒。若时间已到,还没有客户端连接,则抛出InterruptedIOException异常,accept()方法不再阻塞,该倾听Socket可继续使用。若timeout值为0,则表示accept()永远等待。该方法必须在倾听Socket创建后,在accept()之前调用才有效。
void close()throws IOException
	//关闭监听Socket
InetAddress getInetAddress()
	//返回此服务器套接字的本地地址
int getLocalPort()
	//返回此套接字在其上监听的端口号
SocketAddress getLocalSocketAddress()
	//返回此套接字绑定的端点的地址

2.sokect类

构造方法:

//创建流套接字并将其连接到指定IP地址的指定端口号。
Socket(InetAddress address, int port)

常用方法:

InetAddress getLocalAddress()
	//返回对方Socket中的IP的InetAddress对象
int getLocalPort()
	//返回本地Socket中的端口号
InetAddress getInetAddress()
	//返回对方Socket中IP地址
int getPort()
	//返回对方Socket中的端口号
void close() throws IOException
	//关闭Socket,释放资源
InputStream getInputStream() throws IOException
	//获取与Socket相关联的字节输入流,用于从Socket中读数据。
OutputStream getOutputStream() throws IOException
	//获取与Socket相关联的字节输出流,用于向Socket中写数据。

五,Socket实现客户端和服务端通讯

例:

  • 服务端代码
public class FuWuDuan {

	public static void main(String[] args) {
		ServerSocket ss = null;
		Socket s = null;
		InputStream is = null;
		OutputStream os = null;
		Scanner sc = null;
		try {
			
			ss = new ServerSocket(1314);
			sc= new Scanner(System.in);
			while (true) {
				
				//创建监听,接受客服端请求
				s = ss.accept();
			
				is = s.getInputStream();
				//读写客户端的请求
				byte b[] = new byte[1024];
				is.read(b);
				System.out.println("服务端收到:"+new String(b));					
						
				//输出请求,发生客户端
				os = s.getOutputStream();
				
				System.out.println("服务端请发出:");
				String str = sc.next();
				byte b1[] = str.getBytes();
				os.write(b1);
				os.flush();			
			}		
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//关流	
		}	
	}
}
  • 客户端代码
public static void main(String[] args) {
		
		Socket s = null;
		OutputStream os = null;
		Scanner sc = null;
		InputStream is = null;
		+
		try {
			//创建连接,连接服务端
			
			sc= new Scanner(System.in);
			
			while (true) {
				s = new Socket("192.168.2.88", 1314);
				//输出请求,发生服务端
				os = s.getOutputStream();
				
				System.out.println("客服端请发出:");
				String str = sc.next();
				byte b[] = str.getBytes();
				os.write(b);
				os.flush();
			
				is = s.getInputStream();
				//读写服务端的请求
				byte b1[] = new byte[1024];
				is.read(b);
				System.out.println("客服端收到:"+new String(b));					
			}		
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//关流
		}
	}
}
这篇关于JAVA 网络编程基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!