Java网络编程day1

在day0中,我们介绍到了Socket,接下来我将继续往下介绍

1. TCP网络编程

基本介绍

1.这是基于Socket的网络编程

2.基于客户端-服务端的网络通信

3.在底层使用TCP/IP协议

4.举例:客户端发送数据,服务端在控制台接受并且显示;服务端发生数据,客户端在控制台接受并且显示

具体如图:

应用案例(字节流)

说了这么多,用代码实现才是自己掌握了而且是可以用来复习的

我们先用字节流来实现

实现案例具体要求

1.因为TCP编程是基于客户端和服务端的,所以我们需要编写一个客户端和服务端

2.在day0中说到,访问计算机某一个进程需要用到计算机的端口,我们在这里用7777端口

3.客户端连接到服务端,发送 hello server ,服务端在控制台显示

4.服务端在接收到客户端发送的hello server后,给客户端发送 hello client ,客户端在控制台显示

5.客户端和服务端在接收完毕并且显示后进行关闭流和自己的服务

实现案例思路

1.我们不可能让我们的客户端无缘无故连接到我们服务端的9997端口,所以我们需要用代码在服务端实现端口的接收

2.当然,服务端在进行第一步的步骤之后,客户端也需要用代码实现连接上服务端的7777端口

3.因为TCP是基于Socket编程的,所以我们在客户端和服务端都要创建Socket对象

4.因为传输数据需要用到流,那么在Socket类中有方法getInputStream()和getOutputStream()方法,分别用来获取输入流和输出流的方法

5.我们还需要用到流提供的write()方法和read()方法用来输入数据和输出数据

6.最后流和对象都要进行关闭

实现案例代码

首先实现第一步:

我们通过构建ServerSocket对象来进行端口的可连接,代码为

ServerSocket serverSocket = new ServerSocket(7777);

创建一个Socket对象socket来保证端口7777是可连接的,代码为

Socket socket = serverSocket.accept();

那么第一步就结束了

第二步,编写客户端,使得客户端可以连接7777端口:

我们在Socket类给的构造器中,输入主机的IP地址和要连接的端口7777

第三步,在两端都创建Socket对象,在前两步都已经创建

第四步,获取用于数据传输的流对象:

这是客户端的输出流对象:

这是客户端的输入流对象:

这是服务端的输出流对象:

这是服务端的输入流对象:

提示:输出流的意义是从本端发出数据,输入流的意义是接受另一端发出的数据

第五步,用输入流和输出流提供的方法来显示数据在控制台上:

客户端利用流写数据 hello server:

客户端利用流接受数据:

服务端利用流写入数据 hello client:

服务端利用流接收数据:

来到第六步,关闭流和socket对象:

服务端:

客户端:

代码演示

客户端控制台信息:

服务端控制台信息:

大体上这一个程序就已经写完了,但是还是有一些小细节要提醒一下:

注意事项

1.当服务端发来消息,客户端接受结束并且在控制台显示时,我们需要做一个结束标志,否则两个程序就会进入停滞状态,谁也不会继续往下运行

两端接受完毕后结束标志为:

socket.shutdownOutput();
socket.shutdownInput();

2.在接受数据时,因为我们是用字节流来接受的,而不是字符流,那么我们就需要设置一个byte数组buf为1024,而且我们在读写数据时我们需要定义一个readLen变量,用于判断我们的read函数是否读完,如果读完while循环结束,而且readLen变量话可以防止我们要读的数据产生缺失或者是增加,具体代码如下:

byte[] buf = new byte[1024];
        int readLen = 0;
        while ((readLen  = inputStream.read(buf)) != -1){
            System.out.println(new String(buf,0,readLen));
        }

3.流对象和socket对象一定要关闭

如上就是用字节流实现的TCP编程,实现了服务端和客户端进行互发消息并且接受显示在控制台的程序

应用案例(字符流)

具体实现和实现字符流差不多,只不过这边需要使用字节流,字节流读取文件的方式更快,而且方式更加简单,代码更加简洁,操作性更高。

这里不在多赘述,我们就讲述一下代码从字符流修改到字节流的思路和具体代码分析

实现案例思路

要从字节流转换到字符流,肯定需要转换流,把我们socket的getInputStream()和getOutputStream()得到的字节流转换为BufferedReader和BufferedWriter

实现案例代码

客户端的输出流转换:

客户端的输入流转换:

服务端的输出流转换:

服务端的输入流转换:

之后我们用write直接写入字符串和readLine直接读取

代码演示

客户端代码演示:

服务端代码演示:

注意事项

在使用字节流输入和输出时,我们也需要进行结束标志,但是这里的结束的标志可以是newLine()函数,但是这也有一个前提,我们必须使用readLine()来读取数据

以上就Java网络编程的主要内容,谢谢大家!

  • 27
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值