引言
为什么我们要先来了解网络编程的知识,因为Java从一开始就是为了网络应用而设计的编程语言,而我们要知道我们编写的程序运行时是怎样交互的。
一、什么是网络编程
网络编程: 使用套接字来达到进程间通信,现在一般称为TCP/IP编程,主要涉及到的内容是Socket编程。
二、网络协议及接口
计算机网络中实现通信必须有一些约定,即通信协议;包括对速率,传输代码,代码结构,传输控制步骤,出错控制等制定的标准。为了使两个节点之间能进行对话,必须在他们之间建立通信工具(即接口),使彼此之间,能进行信息交换。
通信协议的分层规定:
把用户应用程序作为最高层,把物理通信线路作为最底层,将其间的协议处理分为若干层,规定每层处理的任务,也规定每层的接口标准。
分层参考模型:
常用的协议:
传输层:TCP协议,UDP协议
网络层:IP协议
应用层:HTTP协议,FTP协议
小拓展:
网络通信三要素:IP地址,端口号,通讯协议
三、TCP协议
(1)首先是服务端通过ServerCocket对某一个端口进行监听,通过accept()函数来判断是否有客户端连接进来。
(2)客户端发送消息给服务端,同时接收服务端返回的消息。
(3)服务端收到客户端消息后,同时返回客户端消息。
服务端代码示例:
/**
* @description 服务端
* @className TestServer
* @package web.tcp.test1
*/
public class TestServer {
InputStreamReader isr;
BufferedReader br;
PrintWriter pw;
public static void main(String[] args) {
TestServer testServer = new TestServer();
}
public TestServer() {
try {
//监听某个端口
ServerSocket serverSocket = new ServerSocket(8899);
System.out.println("我是socket服务器正在监听8899端口.........");
//等待某个客户端来连接,accept()函数将返回一个socket连接
Socket socket = serverSocket.accept();
//要读取socket中传递的数据
isr = new InputStreamReader(socket.getInputStream());
br = new BufferedReader(isr);
//通过readline()函数来读写数据
String info = br.readLine();
System.out.println("服务器收到的消息为:" + info);
//我们通过pw向socket写数据,true表示即时刷新
pw = new PrintWriter(socket.getOutputStream(), true);
pw.println("你好, 我是服务器!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (pw != null) {
pw.close();
}
if (br != null) {
br.close();
}
if (isr != null) {
isr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码示例:
/**
* @description 客户端
* @className TestClient
* @package web.tcp.test1
*/
public class TestClient {
InputStreamReader isr;
BufferedReader br;
PrintWriter pw;
public static void main(String[] args) {
TestClient testClient = new TestClient();
}
public TestClient() {
try {
//socket()函数就是去连接某个服务器,ip+端口
Socket socket = new Socket("127.0.0.1", 8899);
//如果socket连接成功,就可以发送数据到服务器端
//我们通过pw向socket写数据,true表示即时刷新
pw = new PrintWriter(socket.getOutputStream(), true);
pw.println("你好, 我是客户端!");
//读取socket中传递的数据
isr = new InputStreamReader(socket.getInputStream());
br = new BufferedReader(isr);
//通过readline()函数来读写数据
String info = br.readLine();
System.out.println("客户端收到的消息为:" + info);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (pw != null) {
pw.close();
}
if (br != null) {
br.close();
}
if (isr != null) {
isr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Java网络编程系列一分享到此结束,后面会持续分享此系列相关知识,欢迎关注我的公众号【积累编程能力】一起学习,一起进步。