Java_基础—网络编程(TCP协议代码及其优化和服务器多线程优化)

探索Java Socket长连接:实现与优化 本文详细讲解了如何在Java中使用Socket实现长连接,包含了基本的客户端-服务器通信示例以及心跳包机制的实现。通过这些示例,开发者可以更好地理解长连接的实现原理,并在实际应用中进行优化和扩展。 阅读详情

TCP: 面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据

1、客户端

  • 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
  • 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
  • 输入流可以读取服务端输出流写出的数据
  • 输出流可以写出数据到服务端的输入流

2、服务端

  • 创建ServerSocket(需要指定端口号)
  • 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
  • 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
  • 输入流可以读取客户端输出流写出的数据
  • 输出流可以写出数据到客户端的输入流

这里写图片描述

Demo1_Client.java

package com.soar.tcp;

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

public class Demo1_Client {
    /*
    1.客户端
    * 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
    * 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
    * 输入流可以读取服务端输出流写出的数据
    * 输出流可以写出数据到服务端的输入流
     */
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("127.0.0.1", 12345);

        InputStream is = socket.getInputStream();       //获取客户端输入流
        OutputStream os = socket.getOutputStream();     //获取客户端输出流

        byte[] arr = new byte[1024];
        int len = is.read(arr);                         //读取服务器发过来的数据

        System.out.println(new String(arr,0,len));      //将数据转换为字符串并打印

        os.write("学习使我快乐".getBytes());              //客户端向服务器写数据

        socket.close();                                 //关掉客户端

    }

}

Demo1_Server.java

package com.soar.tcp;

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

public class Demo1_Server {
    /*
    2.服务端 
    * 创建ServerSocket(需要指定端口号)
    * 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
    * 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
    * 输入流可以读取客户端输出流写出的数据
    * 输出流可以写出数据到客户端的输入流
     */
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(12345);

        Socket socket = server.accept();        //接受客户端的请求

        InputStream is = socket.getInputStream();       //获取客户端输入流
        OutputStream os = socket.getOutputStream();     //获取客户端输出流

        os.write("百度一下".getBytes());                //服务器向客户端写出数据

        byte[] arr = new byte[1024];
        int len = is.read(arr);                         //读取客户端发过来的数据
        System.out.println(new String(arr,0,len));      //将数据转换为字符串并打印

        socket.close();
        //server.close();               //服务器一般不会关
    }

}

将字节流包装成字符流的优化

注意:readLine()方法是以”/r/n”为判断结束标记的

Demo2_Client.java

package com.soar.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Demo2_Client {
    /*
    1.客户端
     */
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("127.0.0.1", 12345);

        //将字节流包装成了字符流
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //PrintStream中有写出换行的方法
        PrintStream ps = new PrintStream(socket.getOutputStream());


        System.out.println(br.readLine());
        ps.println("你好,我是Soar_Sir的粉丝");
        System.out.println(br.readLine());
        ps.println("我超喜欢你");
        socket.close();                                 //关掉客户端

    }

}

Demo2_Server.java

package com.soar.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Demo2_Server {
    /*
    2.服务端 
     */
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(12345);

        Socket socket = server.accept();        //接受客户端的请求

        //将字节流包装成了字符流
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //PrintStream中有写出换行的方法
        PrintStream ps = new PrintStream(socket.getOutputStream());


        ps.println("欢迎咨询Soar_Sir");
        System.out.println(br.readLine());      //readLine()方法是以"/r/n"为判断结束标记的
        ps.println("谢谢");
        System.out.println(br.readLine());

        socket.close();
        //server.close();                       //服务器一般不会关
    }

}

优化服务器,将服务器改为多线程的

package com.soar.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Demo3_Server3 {
    /*
    2.服务端 
     */
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(12345);

        while(true){
        //匿名内部类的变量需要用final来修饰
        final Socket socket = server.accept();      //接受客户端的请求
        new Thread(){
            public void run(){
                try {
                    //将字节流包装成了字符流
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    //PrintStream中有写出换行的方法 
                    PrintStream ps = new PrintStream(socket.getOutputStream());

                    ps.println("欢迎咨询Soar_Sir");
                    System.out.println(br.readLine());      //readLine()方法是以"/r/n"为判断结束标记的
                    ps.println("谢谢");
                    System.out.println(br.readLine());

                    socket.close();
                } catch (IOException e) {

                    e.printStackTrace();
                }
            }
        }.start();

    }
    }
}
【Java学习】7大技巧揭秘网络编程基础,你真的会了吗? 嘿,小伙伴们,你们好呀!今天我们要聊一聊网络编程的基础知识,这可是程序员必备的技能之一哦!网络编程听起来好像很高大上,其实只要掌握了几个核心概念和技巧,你也能轻松上手。废话不多说,让我们一起进入网络编程的世界吧!定义网络编程是指编写能够通过网络进行通信的程序。这些程序可以通过互联网或其他网络协议(如TCP/IP)进行数据交换。网络编程的核心在于客户端-服务器模型,其中一个程序(客户端)发起请求,另一个程序(服务器)响应请求。常用协议TCP(传输控制协议):面向连接的协议,保证数据的可靠传输。 阅读详情

相关推荐

java网络编程TCP 多线程连接例子

TCP网络编程 根据文件内容读写, 支持多线程。包括客户端和服务端

TCP协议-Socket连接优化

我们探讨Java中Socket连接的性能优化方向分析,以及如何通过优化提高Socket连接的性能。我们分别从代码优化、协议优化和网络优化三个方向阐述了优化的方法和技术,并提出了性能优化的步骤。最后,我们通过数据来说明优化效果,强调了客观评估的重要性。在实践中,我们需要根据具体的应用场景和需求,选择合适的优化方向和方案,并进行相应的调整和改进。同时,我们还需要注意性能优化的成本和收益比,避免过度优化带来的时间和资源浪费。

qq_42538588的博客 1441

TCP/IP多线程web服务器实现,Multi-Threaded Web Server java实现多网页请求访问

测试无问题,默认字符集请改为utf-8,端口号可以按自己喜好更改,已经准备好iisstart.html文件在其中,可以访问这个网页或是自己新令。

TCP 的优化

TCP 三次握手优化/四次挥手优化/窗口优化

Sky_Lee_1的博客 1486

java 用udp,tcp协议实现的局域网聊天程序 期末大作业 可私聊,群聊

文件传输功能尚不完善,私聊群聊功能已经完善,这是我大一时写的期末大作业,现在分享给写大作业的同学,两台电脑要在同一局域网才能使用该程序聊天

网络编程大作业(邮件客户端实现,含源码)

网络编程大作业(邮件客户端实现,含源码)

Java网络编程性能优化

本文介绍了Java网络编程性能优化的关键技术:1)连接池减少连接创建开销;2)异步编程提高线程利用率;3)数据缓存降低数据获取时间;4)零拷贝技术优化数据传输效率;5)直接内存分配减轻GC压力。通过合理组合这些技术,可显著提升网络应用的响应速度、吞吐量和并发处理能力,优化指标包括将响应时间降至毫秒级、吞吐量提升至每秒数万请求、支持数万并发连接。文中提供了具体实现示例,如HttpClient连接池、CompletableFuture异步处理等代码片段。

shangjg3的博客 527

Java网络通信中ServerSocket的设计优化方案

今天小编就为大家分享一篇关于Java网络通信中ServerSocket的设计优化方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

如何优化Java中的网络通信?

本文详细介绍了如何通过NIO、线程池和缓存等技术优化Java中的网络通信。通过合理的技术选择和优化手段,可以显著提升应用程序的网络通信性能和稳定性。微赚淘客系统3.0小编出品,必属精品,转载请注明出处!

微赚淘客开发者博客 432

基于强化学习框架的交易策略学习过程

每个状态s∈S 是一个由六个微观结构特征构成的向量,这些特征反映了当前市场的订单簿状态和近期交易行为。

xu624735206的博客 1111

FPGA远程升级必备:STARTUPE2原语控制Flash的避坑指南

本文深入解析了FPGA远程升级中STARTUPE2原语的核心价值与配置策略,详细介绍了其在QSPI Flash接口设计中的应用。通过Vivado工具和原语控制,开发者可以高效实现安全可靠的远程固件升级,提升系统稳定性和升级效率。

k8l9m0n的博客 398

JAVA中网络编程以及TCP通信程序

一.网络编程 1.软件结构 网络编程就是在一定的协议下,实现两台计算机的通信程序。 俩种结构: (1)C/S结构:Client/Server,客户端和服务器结构。 (2)B/S结构:Browser/Server,浏览器和服务器结构。 2.网络通信协议 网络通信协议 TCP/IP通信协议 3.协议分类 (1)UDP协议(无通信连接) (2)TCP协议(面向连接) 4.网络编程三要素 协议...

Milk的博客 599

OpenClaw(原Clawdbot/Moltbot)本地部署快速指南

支持Telegram、Slack、Discord、iMessage等多平台接入,通过配置文件或环境变量填写对应平台的Token,配置后执行。支持对接OpenAI、Anthropic、阿里云百炼等云端模型,也可搭配Ollama使用本地模型。默认仅允许已配对用户交互,群聊场景建议开启Docker沙箱模式,在配置文件设置。执行后跟随指引确认安全说明,进入QuickStart模式,默认网关端口为。可查看已加载模型,通过绑定的通讯通道发送测试指令,响应正常即部署完成。,限制非主会话操作权限,提升安全性。

wukangjupingbb的博客 8479

网络编程原理

网络编程原理

m0_62360856的博客 541

在Windows 11上用VirtualBox搞定WRF-Hydro 5.2.0:一个水文模型小白的Ubuntu 22.04虚拟机避坑实录

本文详细记录了在Windows 11上使用VirtualBox和Ubuntu 22.04虚拟机成功编译安装WRF-Hydro 5.2.0水文模型的全过程。从虚拟环境配置、依赖库安装到环境变量设置,作者分享了针对Linux新手的实用避坑技巧和关键命令,帮助科研人员高效完成水文模型的环境搭建。

weixin_30733003的博客 354

555时基芯片的5种经典电路设计:从方波发生器到PWM调光实战

本文深入解析了555时基芯片的5种经典电路设计,从基础的无稳态方波发生器、单稳态触发器,到实用的占空比可调PWM信号源,并重点介绍了如何引入TVS保护电路增强系统鲁棒性。最后通过一个带保护的PWM LED调光台灯实战项目,综合展示了信号生成、功率驱动与电路保护的核心技术,是电子爱好者掌握模拟电路设计与应用的绝佳指南。

weixin_29207439的博客 492

网络编程-Echo程序进化

场景描述:Echo程序是一个网络编程通信交互的一个经典案例,称为“回应程序”。即客户端输入什么内容,服务端就会在这些内容前加上“Echo”\,并将信息发回给客户端。 第一个TCP程序: 建立服务器程序HelloServer.java import java.net.* ; import java.io.* ; public class HelloServer{ public

zhangze_wancheng的专栏 1802

MuMu模拟器过检测实战:从硬件伪装到API欺骗的完整避坑指南

本文详细介绍了MuMu模拟器过检测的实战技术,从硬件伪装到API欺骗的全方位解决方案。通过修改CPU/GPU信息、内存分布、系统属性和行为模拟等关键技术,帮助用户有效绕过现代应用的模拟器检测机制,提升模拟器的隐蔽性和稳定性。

xxx12的博客 1404

【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文)

Socket套接字,是由系统提供的用于网络编程的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。 前面说过,要想进行网络编程,需要使用的系统API,本质上是由传输层提供的。 传输层涉及到的主要协议有两个: 流套接字:TCP(传输控制协议) 数据报套接字:UDP(用户数据报协议)

StuLearn-LJC的博客 3087

FAST-LIO论文公式解析

FAST-LIO论文公式解析

努力努力努力 670

钉钉多维表格开发

从0到1完成钉钉多维表格开发SDK对接与实践案例。

沉修所长,勇逐新机;安而不怠,静而思变 3634

网络编程 UDP 和 TCP

介绍了网络编程的基本概念和Socket介绍,并介绍Java中UDP和TCP使用,通过一个UDP和TCP分别实现的回显服务器来练习

2401_89019969的博客 1461

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java网络编程之TCP协议

本文主要介绍了TCP协议,以及它的基本使用,并使用实例来加以验证。

凉茶铺的博客 2405

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java 网络编程之Socket详解

Java Socket概念TCPJava SocketSocket APITCP编程服务器端客户端多线程实现服务器与多客户端之间通信步骤Socket通信基本示例基础模式双向通信,发送消息并接收消息如何告知对方已发送完命令服务端优化结语   同学们,今天我们来一起学习Java网络编程里的socket,通过本文的内容,我们就能掌握socket的基本概念以及基本使用。 概念 TCP TCP(传输控制协议)是面向连接的可靠的,基于字节流的传输通信协议。在简化的计算机网络OSI模型中(如下图所示),它完成第四层传输层

ᶻᶻᶻ 枕星河的博客 6864

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Socket网络编程入门:UDP+TCP双案例手把手教你写服务器

大家好,今天我们来聊一个Java后端开发绕不开的话题——网络编程。你有没有想过,我们每天刷抖音、逛淘宝、玩网游,这些数据是怎么从服务器传到你手机上的?背后的技术支撑就是网络编程。学会了Socket套接字,你就能自己写服务器、写客户端,真正理解数据是怎么在网络中传输的。这篇文章我会用最通俗的语言,配合完整的代码案例,带你从零入门UDP和TCP两种套接字编程。看完你就能动手写出自己的第一个网络程序!有Java基础、想入门网络编程的同学。

2401_89723786的博客 1815

22Java之网络编程(IP地址、端口号、协议、UDP通信、TCP通信、BS架构程序)

IP地址、端口号、协议、UDP通信、TCP通信、BS架构程序

qq_56947957的博客 1630
上一篇: 电脑如果打不开jar文件的解决办法
下一篇: Test_Java_网络编程(客户端向服务器发送字符串,服务器将字符串反转后发送给客户端)
Soar_Sir
博客等级 码龄10年 30粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值