Java网络编程日记(一)

引言

为什么我们要先来了解网络编程的知识,因为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网络编程系列一分享到此结束,后面会持续分享此系列相关知识,欢迎关注我的公众号【积累编程能力】一起学习,一起进步。
我的公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值