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 {
//关流
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能