Java实现网络通信(TCP程序设计)


提示:以下是本篇文章正文内容,下面案例可供参考

一、TCP网络程序设计是什么?


TCP网络程序设计是指利用Socket类编写通信程序。
利用TCP协议进行通信的程序有主次之分,一个称为服务器端程序,另一个称为客户端程序


二、TCP网络程序设计原理:

1.图示:

在这里插入图片描述

2.客户端与服务器端分析:

Socket的本质就是将数据抽象成I/O流,在网络间传输数据
套接字两台机器间通信的端点

服务器端:可以给客户端写出数据,读取客户端发来的数据
客户端:可以读取服务器端发来的数据,给服务器写出数据

用到的工具类:
服务器端:ServerSocket
创建对象:ServerSocket(int port)
该方法创建绑定到特定端口的服务器套接字
参数port为端口号由自己定义除0~1024以及安装的软件默认占用的端口号之外的端口号
调用方法:Socket(返回值类型) accept()
该方法侦听并接收到此套接字的连接

客户端:Socket
创建对象:Socket(String host,int port)
参数host为IP地址port为端口号
该方法创建一个流套接字并将其连接到指定主机上的端口号
调用方法:InputStream类中的getInputStream()方法
该方法能够返回此套接字的输入流
                  OutputStream类中的getOutputStream()方法
该方法能够返回此套接字的输出流

3.如何利用DOS窗口查看自己的IP地址:

①打开cmd管理员窗口

按下win+r键快速启动命令窗口,输入cmd打开管理员界面
在这里插入图片描述
在这里插入图片描述

②输入命令查看IP地址

输入 ipconfig 命令即可获取到本机的地址信息,IPv4便为本机的IP地址
在这里插入图片描述


三、网络通信案例测试:

1.服务器端类:

package dreamfly.net.server;

//读取客户端发来的数据,给客户端写出数据

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws IOException {

        //1.开启服务器,参数是指开着的端口号
        ServerSocket server = new ServerSocket(8899);
        System.out.println("服务器已成功启动");
        //2.接收客户端发来的连接
        Socket socket = server.accept();
        System.out.println("接收到客户端发来的请求");
        //3.获取读取流
        InputStream in = socket.getInputStream();
        //4.读取数据
//        int data = in.read();      //默认返回的是整数
        for (int i = 0;i < 5;i++){
            char data = (char)in.read();
            System.out.print(data);
        }
        //5.给客户端写出数据
        System.out.println();
        OutputStream out = socket.getOutputStream();
        out.write("world".getBytes());
        System.out.println("服务器端成功发送数据");
        out.close();
    }
}

运行时要先在方法处抛出IOException或者用try/catch语句块包围可能会发生异常的语句,在这里我选择了第一种抛出IOException,其次在服务器端类中输出语句是为了检测是否成功发送出数据,如果没有执行到输出语句则说明数据没有发送成功。

2.客户端类:

package dreamfly.net.client;

//读取服务器端发来的数据,给服务器端写出数据

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Client {

    public static void main(String[] args) throws IOException {
        //1.连接到指定的服务器(ip+port)
        Socket socket = new Socket("127.0.0.1",8899);
        System.out.println("已连接成功");
        //2.获取写出流
        OutputStream out = socket.getOutputStream();
        //3.写出数据,字节流只能写出整数或字节数组
        //将hello对应整数编程对应的字节数组,getBytes()将String转换为byte[]
        out.write("hello".getBytes());
        System.out.println("客户端成功发送数据");
        InputStream in = socket.getInputStream();
        for (int i = 0;i < 5;i++){
            char data = (char)in.read();
            System.out.print(data);
        }
        System.out.println();
        System.out.println("成功接收服务器端数据");
        out.close();
    }
}

四、运行结果:

1.开启服务器端

在这里插入图片描述

2.开启客户端

服务器端运行结果:
在这里插入图片描述

客户端运行结果:
在这里插入图片描述

3.注意事项:

运行顺序为:先开启服务器端再运行客户端
OutStream 字节流只能写出整数或字节数组要传输字符串类型的数据时要用getBytes()方法将String类型的数据转换为byte[]字节数组

如果在没有开启服务器端的情况下开启客户端,将会有以下的运行结果:
在这里插入图片描述
原因:因为服务器端口号没有打开,客户端无法连接到服务器对应端口


五、总结

以上就是Java实现简单的网络通信的内容,附上本文中用到的类在API中的描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 15
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Java高级程序设计第四章是关于网络编程的。关于网络编程的详细内容可以在《完整版 Java高级教程 Java语言程序设计 第4章 Java泛型(共10页).ppt》找到。网络编程使用Java编程语言进行网络应用开发的过程,它涉及到使用Socket建立连接传输数据和进行网络通信等方面的知识。在这一章节,你将学习如何使用Java网络编程API,实现客户端服务器端之间的通信具体内容包括Socket编程、TCP协议、UDP协议、HTTP协议以及常见的网络通信问题等等。这些知识将帮助你了解和掌握Java网络编程的基础知识和技巧。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [完整版 Java编程基础入门教程 Java语言程序设计 第10章_网络编程(共68页).ppt](https://download.csdn.net/download/qq_27595745/66227868)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [完整版 Java高级教程 Java语言程序设计 第4章 Java泛型(共10页).ppt](https://download.csdn.net/download/qq_27595745/66774031)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream_飞翔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值