TCP网络通信

 

 TCP通信的 实现发1收1

package TCP1;


 //完成TCP通信的 实现发1收1

import java.io.DataOutputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class Client {
    public static void main(String[] args)throws Exception {

        //1:创建Socket对象并同时请求服务端程序的链接

       Socket socket= new Socket("127.0.0.1",8888);


       //2:从Socket通信管道中得到一个字节输出流 用来数据发给到服务器
       OutputStream os= socket.getOutputStream();


        //3:把低级的输出流封装成数据输出流
       DataOutputStream dos=  new DataOutputStream(os);

       //开始写数据出去了
        dos.writeUTF("在一起好吗?");

        System.out.println("发送完成");

        dos.close();    //释放资源IO流


        socket.close();  //释放网络资源TCP通信
   }

}

 

package TCP1;

// 完成TCP通信服务端 实现发1收1

import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws Exception {

        System.out.println("===============启动服务端================");

        //1:创建serverSocket的对象 同时为服务端注册端口
     ServerSocket serverSocket = new ServerSocket(8888);


        //2:使用serverSocket 对象 调用accept 方法 等待客户端连接请求
      Socket socket= serverSocket.accept();

      //3:从socket管道中得到一个字节输入流
        InputStream inputStream = socket.getInputStream();

        //4: 把原始的字节输入流封装成输入流
      DataInputStream dis=  new DataInputStream(inputStream);



      //5:使用数据输入流 读取客户端发箍来的数据
     String rs= dis.readUTF();


        System.out.println(rs);

         // 6:谁发的数据获取IP
        System.out.println(socket.getRemoteSocketAddress());
        System.out.println(socket.getPort());


        dis.close();    //释放资源IO流


        socket.close();  //释放网络资源TCP通信
    }

}

完成TCP通信的 多发多收

package TCP2;


 //完成TCP通信的 多发多收

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args)throws Exception {

        //1:创建Socket对象并同时请求服务端程序的链接

       Socket socket= new Socket("127.0.0.1",8888);


       //2:从Socket通信管道中得到一个字节输出流 用来数据发给到服务器
       OutputStream os= socket.getOutputStream();


        //3:把低级的输出流封装成数据输出流
       DataOutputStream dos=  new DataOutputStream(os);
        Scanner sr=new Scanner(System.in);
        while (true) {
            //开始写数据出去了
            System.out.print("请说: ");
            String msg= sr.nextLine();
            dos.writeUTF(msg);
            dos.flush();


            //用户输入exit 退出
            if ("exit".equals(msg)){
                System.out.println("欢迎下次光临 退出成功");
                dos.close();
                socket.close();
                break;
            }
        }


    }

}

 

package TCP2;

// 完成TCP通信服务端  多发多收

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

public class Server {
    public static void main(String[] args) throws Exception {

        System.out.println("===============服务端启动成功================");

        //1:创建serverSocket的对象 同时为服务端注册端口
     ServerSocket serverSocket = new ServerSocket(8888);


        //2:使用serverSocket 对象 调用accept 方法 等待客户端连接请求
      Socket socket= serverSocket.accept();

      //3:从socket管道中得到一个字节输入流
        InputStream inputStream = socket.getInputStream();

        //4: 把原始的字节输入流封装成输入流
      DataInputStream dis=  new DataInputStream(inputStream);


        while (true) {
            //5:使用数据输入流 读取客户端发箍来的数据
            try {
                String rs= dis.readUTF();

                System.out.println(rs);
            } catch (Exception e) {
                System.out.println(socket.getRemoteSocketAddress()+"离线了!");
                socket.close();
                dis.close();
                break;
            }

            // 6:谁发的数据获取IP
           // System.out.println(socket.getRemoteSocketAddress());
           //System.out.println(socket.getPort());
        }


    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/104663.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之队列(源代码➕图解➕习题)

前言 在学过栈之后,会了解到栈的底层是根据顺序表或者链表来构建的,那么我们今天要学习的队列是否也是基于顺序表和链表呢?那我们直接进入正题吧! 1. 队列的概念(图解) 还是跟上节一样,依旧用图…

Python3打印九九乘法表

# 九九乘法表 # 定义行数 i 1while i<9:# 定义列数j 1while j<i: # print(" %d * %d %d\t" %(j,i,(j*i)),end) # \t:对齐;end:不换行&#xff1b;j1i1print() # 必须添加这句话&#xff01;&#xff01;&#xff01;print("九九乘法表打印完毕&#xf…

HiveSQL分位数函数percentile()使用详解+实例代码

目录 前言 一、percentile() 二、percentile_approx() 点关注&#xff0c;防走丢&#xff0c;如有纰漏之处&#xff0c;请留言指教&#xff0c;非常感谢 前言 作为数据分析师每个SQL数据库的函数以及使用技能操作都得点满&#xff0c;尤其是关于统计函数的使用方法。关于统…

C语言系统化精讲(六):C语言选择结构和循环结构

文章目录 一、C语言选择结构1.1 if语句1.2 if…else语句1.3 else if语句1.4 if语句的嵌套1.5 条件运算符1.6 switch语句的基本形式1.7 多路开关模式的switch语句1.8 if…else语句和switch语句的区别 二、C语言循环结构2.1 C语言while循环和do while循环详解2.1.1 while循环2.1.…

【Python】Windows跟随程序启动和关闭系统代理

前言 在日常使用计算机时&#xff0c;偶尔可能需要配置代理来访问特定的网络资源或进行网络调试。 当在使用mitmproxy 时候&#xff0c; 程序开始前&#xff0c;需要手动打开系统代理&#xff1b;程序结束后&#xff0c;需要手动关闭系统代理。 这些重复性且没有技术含量工作…

C++智能指针[下](shared_ptr/weak_ptr/循环引用/删除器)

文章目录 4.智能指针[shared_ptr]4.1设计理念成员属性 4.2主要接口拷贝构造 4.3引用计数线程安全问题测试线程安全通过对计数引用的加锁保护使得类线程安全类实例化的对象使用时需要手动加锁保护 "锁"的引进线程引用传参问题 4.4整体代码 5.循环引用问题5.1问题的引入…

Java多线程秘籍,掌握这5种方法,让你的代码优化升级

介绍5种多线程方法&#xff0c;助您提高编码效率&#xff01; 如果您的应用程序与那些能够同时处理多个任务的应用程序相比表现不佳&#xff0c;很可能是因为它是单线程的。解决这个问题的方法之一是采用多线程技术。 以下是一些可以考虑的方法&#xff1a; 线程&#xff08;…

超声波测距与倒车雷达电路1

文章目录 超声测距 超声测距 超声测距跟倒车雷达绝大多数用的都是40kHz 接受是一个同相比例整流后加上一个比较器 换能器自带滤波&#xff0c;需要激发信号与换能器信号匹配 这个电路图是错的&#xff0c;一直不停的发&#xff0c;底下来不及收 频率越高传输距离…

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET “/**“

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET "/**" 问题发现问题解决 问题发现 WebTestClient 是 Spring WebFlux 框架中提供的用于测试 Web 请求的客户端工具。它可以不用启动服务器&#xff0c;模拟发送 HTTP 请求并验证服务器的响…

电脑怎么共享屏幕?电脑屏幕共享软件分享!

如何控制某人的电脑屏幕&#xff1f; 有时我们可能需要远程控制某人的计算机屏幕&#xff0c;例如&#xff0c;为我们的客户提供远程支持&#xff0c;远程帮助朋友或家人解决计算机问题&#xff0c;或在家中与同事完成团队合作。那么&#xff0c;电脑怎么共享屏幕&#xff…

SD-WAN让跨境网络访问更快、更安全!

目前许多外贸企业都面临着跨境网络不稳定、不安全的问题&#xff0c;给业务合作带来了很多困扰。但是&#xff0c;现在有一个解决方案能够帮助您解决这些问题&#xff0c;让您的跨境网络访问更快、更安全&#xff0c;那就是SD-WAN&#xff01; 首先&#xff0c;让我们来看看SD-…

时序预测 | Python实现ARIMA-LSTM自回归移动差分模型结合长短期记忆神经网络时间序列预测

时序预测 | Python实现ARIMA-LSTM自回归移动差分模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-LSTM自回归移动差分模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Python实现ARIMA-LSTM自…

PostgreSQL12中浮点数输出算法优化带来的小问题

最近碰到同事发来这样两个SQL&#xff0c;开发反馈输出的结果异常。 bill# select 0.1284*100::float;?column? --------------------12.839999999999998 (1 row)bill# select (0.1284*100)::float;float8 --------12.84 (1 row) 乍一看其实能看出明显的区别&#xff0c;由于…

vscode推送gitee方法

有一套uni-app代码需要修改&#xff0c;版本控制使用vscode的git功能&#xff0c;远程库在gitee上。 1、设置vscode中git.exe路径 由于git使用了绿色便携版&#xff08;PortableGit-2.42.0.2-64-bit.7z.exe&#xff09;&#xff0c;vscode未识别到git安装路径&#xff0c;需要…

Zynq UltraScale+ XCZU15EG 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优越性4、详细设计方案设计原理框图IMX214 摄像头及其配置D-PHY 模块CSI-2-RX 模块Bayer转RGB模块伽马矫正模块VDMA图像缓存Video Scaler 图像缓存DP 输出 5、vivado工程详解PL端FPGA硬件设计…

一、高效构建Java应用:Maven入门和进阶

一、高效构建Java应用&#xff1a;Maven入门和进阶 目录 一、Maven简介和快速入门 1.1 Maven介绍1.2 Maven主要作用理解1.3 Maven安装和配置 二、基于IDEA的Maven工程创建 2.1梳理Maven工程GAVP属性2.2 Idea构建Maven JavaSE工程2.3 Idea构建Maven JavaEE工程2.4 Maven工程项…

GaussDB数据库管理系统介绍

1.GaussDB的发展 2.GaussDB的生态 内部&#xff1a; 云化自动化方案。通过数据库运行基础设施的云化将DBA(数据库管理员)和运维人员的日常工作 自动化。外部&#xff1a; 采用与数据库周边生态伙伴对接与认证的生态连接融合方案&#xff0c;解决开发者/DBA难获取、应用难对接等…

【详细】Java网络通信 TCP、UDP、InetAddress

一、网络程序设计基础 1.局域网与因特网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机&#xff08;服务器<-->网络<-->客户机&#xff09;。 服务器是指提供信息的计算机或程序&#xff0c;客户机是指请求信息的计算机或程序。网络用…

基于ResNet34的花朵分类

一.数据集准备 新建一个项目文件夹ResNet&#xff0c;并在里面建立data_set文件夹用来保存数据集&#xff0c;在data_set文件夹下创建新文件夹"flower_data"&#xff0c;点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/example_i…

北京筑龙发声炼化企业大会,助力央国企采购供应链数字化转型

10月25日&#xff0c;以“科技创新引领高质量发展&#xff0c;夯实炼化自立自强根基”为主题的第四届炼化企业创新发展大会暨新技术与解决方案交流会”在浙江省宁波市盛大召开。北京筑龙智能化业务部高级咨询顾问王良受邀出席&#xff0c;带来主题为“智能物料——企业采购供应…