Java网络编程基础

本文深入解析TCP套接字编程原理,涵盖客户端与服务端的建立过程、数据传输及资源关闭等关键步骤。通过具体代码示例,展示如何实现两台计算机间的通信。

参考资料

极客视频教程
毕向东视频

Tcp连接过程,Client端以套接字Socket为载体,Server端以套接字ServerSocket为载体,Server端以Socket接收Client端传过来的信息。

socket编程连接建立过程:
服务器监听
客户端发出请求
建立连接
通信

两台计算机之间的使用套接字建立Tcp:
客户端建立过程:

  1. 创建tcp客户端socket服务,使用的是socket对象,对象创建之初就应该明白目的地;
  2. 如果连接成功,说明数据传输通道已建立;该通道就是Socket流,是底层建立好的,既然是流,就说明既有输出又有输入;想要输入或者输出对象,就要找Socket获取;可以通getOutputStream()和getInputStream()来获取两个字节流;
  3. . 使用输出流,将数据写出;
  4. 关闭资源。

服务端建立过程:

  1. 创建服务端Socket服务,通过ServerSocket对象;
  2. 服务端必须对外提供一个端口,否则客户端连接不上(监听);
  3. 获取连接过来的客户端对象;
  4. 通过客户端对象获取Socket流读取客户端发送过来的数据,并打印在客户端上;
  5. 关闭资源,先关客户端,再关服务端。(服务端只服务客户端一次)

代码示例过程:
client:

public class myClient {
    public static void main(String [] args) {

        //创建客户端对象,创建之初就明确目的地
        Socket socket;

        {
            try {
                socket = new Socket("127.0.0.1", 10004);
                //获取socket的输出流
                OutputStream outputStream = socket.getOutputStream();
                //使用输出流将指定数据写出去
                outputStream.write("客户端信息输出".getBytes());


                //双向通信时,客户端就要读取服务端发过来的数据
                InputStream inputStream = socket.getInputStream();
                byte[] buf = new byte[1024];
                int length = inputStream.read(buf);

                //接收服务端传过来的消息
                String test = new String (buf,0,length);
                System.out.println(test);
                //关闭资源
                socket.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Server:

public class myServer {
    public static void main(String [] args){
        //创建服务端的对象
        try {
            ServerSocket serverSocket = new ServerSocket(10004);

            //获取连接过来的客户端对象
            Socket socket = serverSocket.accept();
            String ip = socket.getInetAddress().getHostAddress();

            //通过socket对象获取输入流,读取客户端发过来的数据
            InputStream inputStream = socket.getInputStream();

            //自定义缓冲
            byte[] buff = new byte[1024];
            int length = inputStream.read(buff);
            String text = new String(buff,0,length);
            System.out.println(ip+":"+text);

            //使用客户端Socket对象输出流给客户端返回数据
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("服务端已收到".getBytes());
            
            //关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值