Java网络编程 双向通信

目录

  • 网络编程
  • 实例
    • 创建客户端
    • 创建服务端
    • 测试

网络编程

Java的网络编程是Java编程语言中用于实现网络通信的一组API和工具。通过Java的网络编程,开发人员可以在Java应用程序中实现客户端和服务器之间的通信,从而构建各种网络应用。

以下是Java网络编程的主要组件和概念:

  1. 套接字(Sockets):套接字是网络通信的基本单元,用于在客户端和服务器之间建立连接。Java提供了多种套接字类型,包括Socket、ServerSocket、DatagramSocket和MulticastSocket等。
  2. 协议(Protocols):协议是用于在网络上传输数据的规则和标准。常见的协议包括TCP/IP、UDP等。Java网络编程支持多种协议,开发人员可以根据需要选择适当的协议。
  3. 地址(Addresses):地址用于标识网络上的主机或服务。在Java中,可以使用InetAddress类来表示IP地址和主机名。
  4. 输入/输出流(InputStreams/OutputStreams):输入/输出流是用于在网络上读写数据的Java I/O类。通过使用这些类,开发人员可以方便地在网络上发送和接收数据。
  5. 服务器(Servers)和客户端(Clients):服务器端程序等待客户端的连接请求,而客户端程序则主动发起连接请求。在Java中,可以使用ServerSocket类来创建服务器端程序,使用Socket类来创建客户端程序。
  6. 多线程(Multithreading):在进行网络编程时,为了提高性能和响应能力,通常需要使用多线程技术。Java提供了多种线程处理机制,包括线程池、线程同步等。
  7. 异常处理(Exception Handling):在进行网络编程时,可能会遇到各种异常情况,例如连接失败、数据传输错误等。Java提供了完善的异常处理机制,可以帮助开发人员更好地处理这些异常情况。

以上是对Java网络编程的简要介绍,希望对你有所帮助。如果你想深入了解Java网络编程的更多细节和示例代码,建议查阅相关的Java教程和文档。

实例

创建客户端

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class TestClient {//客户端//这是一个main方法,是程序的入口:public static void main(String[] args) throws IOException{//1.创建套接字:指定服务器的ip和端口号:Socket s = new Socket("192.168.1.17",8888);//2.对于程序员来说,向外发送数据 感受 --》利用输出流:OutputStream os = s.getOutputStream();DataOutputStream dos = new DataOutputStream(os);//利用这个OutputStream就可以向外发送数据了,但是没有直接发送String的方法//所以我们又在OutputStream外面套了一个处理流:DataOutputStreamdos.writeUTF("你好");//3.关闭流  +  关闭网络资源:dos.close();os.close();s.close();}
}

创建服务端

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer {//服务器//这是一个main方法,是程序的入口:public static void main(String[] args) throws IOException{//1.创建套接字: 指定服务器的端口号ServerSocket ss = new ServerSocket(8888);//2.等着客户端发来的信息:Socket s = ss.accept();//阻塞方法:等待接收客户端的数据,什么时候接收到数据,什么时候程序继续向下执行。//accept()返回值为一个Socket,这个Socket其实就是客户端的Socket//接到这个Socket以后,客户端和服务器才真正产生了连接,才真正可以通信了//3.感受到的操作流:InputStream is = s.getInputStream();DataInputStream dis = new DataInputStream(is);//4.读取客户端发来的数据:String str = dis.readUTF();System.out.println("客户端发来的数据为:"+str);//5.关闭流+关闭网络资源:dis.close();is.close();s.close();ss.close();}
}

测试

  • 先启动服务端,再启动客户端

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

步步深入 k8s 使用 pv pvc sc 在 nfs 基础上共享存储

博客原文 文章目录 前言集群环境nfs 环境搭建pod 挂载 nfs架构图 pvc 方式挂载 nfs架构图 storageclass 方式动态申请 pv架构图 参考 前言 持久化卷(Persistent Volume, PV)允许用户将外部存储映射到集群,而持久化卷申请(Persist…

Python专家指南:全面揭示文件操作的核心机制与实战技巧

在计算机科学领域,文件操作始终占据着至关重要的地位。无论是在日常的数据处理、配置文件管理、大规模数据分析,还是在复杂软件开发、网络通信及分布式存储解决方案中,对文件的操作能力都是程序员必备的基本功。Python语言以其简洁明快的设计…

黄金交易策略(Nerve Nnife.mql4):利用锁定单消除保留单

完整EA: Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 趋势突然转变有大约30%的概率会产生一张锁定单,反复转变之后难免就会形成几个保留单了,可以选择一张与保留单同向同大小(接近也行)的单,去消除这…

半理想架构的Doherty功率放大器理论与仿真-基于GAN器件CGH40010F

半理想架构的Doherty功率放大器理论与仿真-基于GAN器件CGH40010F 理想架构的Doherty功率放大器理论与仿真中已经介绍了如何在ADS中使用理想电流源来对DPA的架构进行仿真。但是理想的电流源太理想了,电压、电流的许多行为都是需要自己使用数学公式去严格定义&#x…

【深度学习】S2 数学基础 P2 线性代数(下)

目录 范数的意义范数的数学意义范数之于深度学习的意义 L1 范数与 L2 范数L1 范数L2 范数 小结 本节博文是线性代数第二部分,主要内容为 L 1 L1 L1 范数与 L 2 L2 L2 范数;有关线性代数基础知识,请访问:【深度学习】S2 数学基础…

【Python】Python代码的单元测试

Python代码的单元测试 单元测试的概念 定义:是指对软件中的最小可测试单元进行检查和验证。 作用:可以确保程序模块是否否和我们规范的输出,保证该模块经过修改后仍然是满足我们的需求。 单元测试的策略 如果要创建单元测试,…

音视频剪辑|剪辑神器FFMPEG的详细介绍和一些基本的参数介绍

FFmpeg的介绍 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。 这个项目最早…

1.蓝桥勇士

Problem: 蓝桥勇士 文章目录 思路解题方法复杂度Code 思路 这是一个典型的动态规划问题,我们可以使用最长递增子序列(LIS)的思想来解决。我们可以定义一个数组dp,其中dp[i]表示以第i个对手结束的最长挑战序列的长度。对于每一个对…

比特币再次上演“初五破五”精彩戏法!

号外:2.13教链内参《随着BTC一度突破5万刀,超过9成持有者已盈利》 比特币无惧美通胀数据阻击,在短暂回落之后坚决反攻,在中国农历大年初五,2月14日情人节,大涨6%,从48k绝地反击,再次…

游戏服务器租用多少钱一年?

游戏服务器租用多少钱一年?1个月游戏服务器费用多少?阿里云游戏服务器26元1个月、腾讯云游戏服务器32元,华为云26元,游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选,游戏专业服务器公网带宽10M、12M、15M…

吃瓜 - 春山学

2024年春晚看似一个贵州献上的歌舞节目《上春山》(白敬亭、魏大勋、魏晨合唱)引发网络破案:白敬亭有没有抢C位和故意换衣服?网上的“白敬亭春晚走位风波”不断升级,喂到嘴里的瓜不吃也不行啊。 三人都是明侦的元老嘉…

学习和长跑很类似,长跑可以通过训练提高跑步的速度和时长,那么学习也可以通过训练提高学习的速度和时长吗?

问题描述:学习和长跑很类似,长跑可以通过训练提高跑步的速度和时长,那么学习也可以通过训练提高学习的速度和时长吗?另外,学习和长跑一样,后半程会出现乏力的现象,但是只要坚持下去,…

【数据结构】15 队列应用实例:多项式加法运算

多项式加法运算 我们准备采用不带头节点的单向链表结构表示一元多项式,并按照指数递减的顺序排列各项。 对列表存放的两个多项式进行加法运算时,可以使用两个指针p1和p2。初始时的p1和p2分别指向这两个多项式第1个节点(指数的最高项&#x…

JavaScript中的Symbol:加密与安全性

JavaScript中的Symbol是一种唯一且不可变的数据类型,引入了一种新的基本数据类型,用于表示独一无二的标识符。在本文中,我们将深入介绍JavaScript中的Symbol,讨论如何将其应用于JS加密中,提供案例代码,并说…

C#通过重写虚方法实现加、减、乘、除运算 通过多态确定人类的说话行为

目录 一、涉及到的知识点1 1.虚方法 2.重写方法 3.重写方法与重载方法的区别 4.通过KeyPressEventArgs.KeyChar限制键盘输入的内容 5.if-else if-else嵌套转换为switch case 二、 涉及到的知识点2 1.多态性 2.使用多态性的注意事项 3. 使用虚方法实现多态性 三、实…

黑马Java——集合进阶(不可变集合、Stream流、方法引用)

目录 一、不可变集合 1、创建不可变集合的应用场景 2、创建不可变集合的书写格式 2.1、不可变的List集合 2.2、不可变的Set集合 2.3、不可变的Map集合 3、小结 二、Stream流 1、体验Stream流的作用 2、Stream流的思想 3、Stream流的使用步骤 3.1、单列集合获取Strea…

站在C/C++的肩膀速通Java面向对象

默认学过C或C,对变量、表达式、选择、循环都会。 运行特征 解释型语言(JavaScript、Python等) 源文件-(平台专属解释器)->解释器中执行编译型语言(C、Go等) 源文件-(平台编译器)->平台可执行文件Java 源文件-(…

【白话前端】JS库的作用和常见的九种类型—值得收藏

js库就好比预制菜,我们想吃美食没必要从买菜、择菜、炒菜开始,直接加工就行。 一、什么是JS库 JS库(JavaScript Library)是指一组封装好的函数、方法、类等,用于简化开发者的编程工作。它们通常提供了常用的功能和算…

Android ·移动应用开发 创建第一个Android项目

文章目录 一、创建第一个Android项目1.1 准备好Android Studio1.2 运行程序1.3 程序结构是什么app下的结构res - 子目录(所有图片、布局、字符串等资源)AndroidManifest.xml 有四大组件,程序添加权限声明 Project下的结构 二、开发android时&…

【ArcGIS Pro二次开发】(79):符号系统_CIMUniqueValueRenderer

CIMUniqueValueRenderer是ArcGIS Pro SDK中的一个类,用于创建唯一值渲染器(Unique Value Renderer)。 在ArcGIS Pro中长这样: 通过对CIMUniqueValueRenderer的操作,可以对符号系统进行更改,实现很多功能。…