浅谈Socket编程及Java实现

无人驾驶-2024-09-智能驾驶与机器视觉09:视觉与多传感器融合 从本章开始,我们将详细介绍视觉与多传感器融合技术。自动驾驶中常用的传感器都有其优势和局限性,单一传感器无法应对复杂的驾驶场景。多传感器融合技术旨在综合利用不同的传感器优势,提升感知的精度和鲁棒性。本章首先介绍多传感器融合的相关概念,之后详细介绍典型的融合方法。 阅读详情
Java是一种可用于进行网络编程的语言,它提供了两种功能强大的网络支持机制:URL访问网络资源的类和用Socket通讯的类,来满足不同的要求。一 是URL用于访问Internet网上资源的应用;另一种是针对client/server(客户端/服务器)模式的应用以及实现某些特殊的协议的应用, 它的通讯过程是基于TCP/IP协议中传输层接口socket实现的。本文想简单的介绍一下Socket编程的Java实现方法。

  客 户基于服务器之间使用的大部分通讯组件都是基于socket接口来实现的。Socket是两个程序之间进行双向数据传输的网络通讯端点,有一个地址和一个 端口号来标识。每个服务程序在提供服务时都要在一个端口进行,而想使用该服务的客户机也必须连接该端口。Socket因为是基于传输层,所以它是比较原始 的通讯协议机制。通过Socket的数据表现形式为字节流信息,因此通讯双方要想完成某项具体的应用则必须按双方约定的方式进行数据的格式化和解释,我们 可以看出使用Socket编程比较麻烦,但是它具有更强的灵活性和更广泛的使用领域。

  有些朋友会问,客户机/服务器工作的模式到底是什么样的呢?好,下面我想结合一张图来介绍一下它们的工作模式。



  那么Java应用程序是如何实现上述过程的呢?java.net包中有两个类Socket和ServerSocket,分别用于在客户机和服务器上创建Socket通讯。

让我们先来看看客户段程序编写的流程:

  1、 首先调用Socket类的构造函数,以服务器的指定的IP地址或指定的主机名和指定的端口号为参数,创建一个Socket流,在创建Socket流的过程中包含了向服务器请求建立通讯连接的过程实现。

  2、 建立了客户端通讯Socket后。就可以使用Socket的方法getInputStream()和getOutputStream()来创建输入/输出流。这样,使用Socket类后,网络输入输出也转化为使用流对象的过程。

   3、 使用输入输出流对象的相应方法读写字节流数据,因为流连接着通讯所用的Socket,Socket又是和服务器端建立连接的一个端点,因此数据将通过连接 从服务器得到或发向服务器。这时我们就可以对字节流数据按客户端和服务器之间的协议进行处理,完成双方的通讯任务。

  4、 待通讯任务完毕后,我们用流对象的close()方法来关闭用于网络通讯的输入输出流,在用Socket对象的close()方法来关闭Socket。

  下面,我想通过一个简单的例子来进一步介绍一下客户端程序的编写

  代码一:

  import java.io.*;

  import java.net.*;

  public class SocketCommunicationClient

  {

   public static void main(String[] args)

   {

   try{

   Socket clientSocket =new Socket ("mice",9000);//创建一个流Socket并与主机mice上的端口9000相连接

   OutputStream output =clientSocket.getOutputStream();//向此Socket写入字节的一个输出流

   DataInputStream input=new DataInputStream(clientSocket.getInputStream());

   file://创建新的数据输入流以便从指定的输入流中读出数据

   int c;

   String response;

   while (( c= System.in.read())!=-1)//从屏幕上接受输入的字符串,并且分解成一个个字符

    {

    output.write((byte)c);

    if(c=='/n')//如果字符为回车,则输出字符串缓冲

    {

     output.flush();

     response=input.readLine();

     System.out.println("Communication:"+response);

    }

   }

   output.close();

   input.close();

   clientSocket.close();

   } catch (Exception e){

    System.err.println("Exception :"+e);

   }

  }

  }

这 个程序是一个非常的简单的数据通讯的例子,程序先创建了一个Socket并和主机mice上的端口9000相连接,然后打开输入输出流,接着程序从标准输 入接收字符并写入流中,每写满一行(以用户键入回车为标志),就把缓冲区中的字符串送往mice上的服务器端程序进行处理,等待服务器端的应答。 input.readLine()方法调用将导致程序停滞直到收到应答信息,程序将一直重复这个过程,直到用户输入中止符。最后程序要关闭socket输 入输出流,在关闭socket和服务器端的连接。


  上面我们看了如何使用Java编写客户端的Socket接口程序,下面我也想简要的谈一谈服务器端的Socket接口程序的Java实现方法,其过程如下所述:

  1、 首先调用ServerSocket类以某个端口号为参数,创建一个ServerSocket对象,即是服务器端的服务程序在该指定端口监听的Socket。

   2、 服务器端程序使用ServerSocket对象的accept()方法,接收来自客户机程序的连接请求,此时服务器端将一直保持停滞状态,直到收到客户端 发来的连接请求,此时该方法将返回一个新建的Socket类的实例,代表和客户机建立的通讯链路在服务程序内的通讯端点。如果采用Java的多线程编程方 法,可以实现并发服务器,继续监听来自其他客户的连接请求。

  3、 使用新建的Socket对象创建输入、输出流对象。

  4、 使用流对象的方法完成和客户端的数据传输,按约定协议识别并处理来自客户端的请求数据,并把处理的结果返回给客户端。

  5、 客户端工作完毕后,则服务器端程序关闭和客户端通讯的流和通讯的Socket。

  6、 在服务器程序运行结束之间,应当关闭用来监听的Socket.

  下面让我们来看一个服务器端的程序的Java实现:

  代码二:

  import java.net.*;

  import java.io.*;

  public class SocketCommunicationServer

  {

   public static void main(String[] args)

   try

   {

    boolean flag=true;//设置标志位为真

    Socket client=null;//创建Socket client以接收来自客户端的请求

    String inputLine;

    ServerSocket serverSocket =new ServerSocket (9000);//以端口9000创建一个服务器Socket

    System.out.println("服务器在端口9000上监听");

    file://也可以使用serverSocket.getLocalPort()来获得端口号

    while(flag)

    {

     client=serverSocket.accept();

     file://监听并接受与此Socket的连接,该方法会阻塞直到有一个连接产生

     DataInputStream input=new DataInputStream(new BufferedInputStream(client.getInputStream()));

     PrintStream output=new PrintStream(new BufferedOutputStream(client.getOutputStream());

     while (( inputLine= input.readLine())!=null)

      {

       if(inputLine.equals("Stop"))

       {

        flag=false;

        break;

       }

       output.println(inputLine);

       output.flush();

      }

      output.close();

      input.close();

      client.close();

     }

     serverSocket.close();

     }catch(IOException e){}

    }

   }

  }

以上,我简略的谈了一下Socket编程的机制以及使用Java进行Socket编程的实现方法,希望能对大家有所帮助。
WPS用户看过来:避开格式错乱坑,用WPS Office完美制作红头文件(2024最新版) 本文详细解析了WPS Office与Word在红头文件制作中的核心差异,提供了2024年最新版的零误差实战指南。从字体处理、页面布局到红头制作关键步骤,帮助用户避开格式错乱坑,确保跨设备显示一致。特别针对WPS用户优化,解决字体丢失、版式错位等常见问题。 阅读详情

相关推荐

从SolidWorks到Simulink:手把手教你用URDF文件搭建六轴机械臂仿真模型(含STL文件配置避坑)

本文详细介绍了从SolidWorks到Simulink的六轴机械臂URDF仿真全流程,包括URDF文件导出、Simscape模型生成与调试、动力学参数获取与验证等关键步骤。重点解决了STL文件配置、关节接口设置等工程化难题,帮助开发者高效构建可控制的数字孪生体。通过实战案例和优化技巧,提升机械臂仿真效率与准确性。

weixin_26812607的博客 267

Java网络编程Socket

Java网络编程Socket

u014644574的博客 6897

【最全选型攻略-盘点篇】市面上有哪些靠谱的工业3D相机品牌?(双目、结构光、TOF、激光三角)

选工业3D相机,选最靠谱的品牌,选最Match你的产品,看这一篇就够了!

jiqishijueyingdi的博客 1万+

如何在java中使用(TCP)Socket编程

下面提供一个详细的 Java Socket 编程教程,包含服务端和客户端的示例代码,并逐步讲解每个部分的原理和细节。在 Java 中,Socket 编程主要依赖于以下两个类:工作原理:下面的示例演示了一个简单的服务器,监听 12345 端口,并为每个连接的客户端启动一个线程进行处理。

m0_66998611的博客 1587

视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

文章目录视觉SLAM的组成结构视觉里程计(VO)-特征点法 -构建稀疏点云地图-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器视觉里程计--总结:SLAM 后端研究滤波器法非线性优化后端方式的差异(有五种优化方式):单目视觉里程计的初始化:运动估计:半直接法运动估计的优化方案:关于解决累计误差的一些方法:关键帧的建图及后端优化:特征的深度估计:图优化的后端研究:视觉与IMU融合的分类:视觉与IMU的融合的优势:存在的问题:优秀的开源: 视觉SLAM的组成结构 视觉里程计(VO) -特

DC 6812

Matlab/simulink频率响应分析方法

Matlab/Simulink仿真系列问题一.电气模块与信号模块 一.电气模块与信号模块

virtuoso~晓晓 3万+

Java中的Socket编程详解

Socket是一种通信机制,允许不同主机之间通过网络进行数据交换。Socket编程主要涉及两个端点:客户端和服务器端。客户端发起连接请求,服务器端监听并响应请求,实现数据的双向传输。Socket编程是Java网络编程的重要组成部分,通过合理的设计和实现,可以构建高效、可靠的网络应用。希望本文的介绍能够帮助大家更好地理解和应用Java中的Socket编程技术,在实际项目中发挥其强大的网络通信能力。

微赚淘客开发者博客 3752

【电磁场计算】磁偶极子在外磁场中的受力

最近在总结电磁场计算公式的时候发现,关于磁偶极子受力的计算公式,在不同文献中的说明有点出入,在此特地写一篇博客澄清一下。

sky4403的博客 7475

Java网络编程-Socket编程初涉一(简易客户端-服务器)

Java网络编程-Socket编程初涉一(简易客户端-服务器编写) 服务器 服务器的socket程序有以下几个任务: 创建ServerSocket。 绑定端口。 监听端口。 阻塞,等待客户端连接。 Java网络编程-Socket简介 服务器socket程序: package socket; import java.io.*; import java.net.ServerSocket; imp...

kaven 1964

PADS导出PCB正反面丝印为CAD文件的方法

本文介绍如何将PADS绘制的pcb格式的PCB文件顶底层丝印及板框导出为CAD的dxf文件格式,并且将底层丝印进行镜像为正常视角

luguodeyo的博客 3296

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

AI人人懂 946

科普文:Java基础系列之【Socket网络编程】

Socket(中文:套接字)编程是网络常用的编程,我们通过在网络中创建Socket关键字来实现网络间的通信;要想解释清楚Socket,首先要知道TCP,要想知道TCP,那就得对TCP/IP的体系结构以及每一层的大概工作有所了解,那么我们就先来说说TCP/IP的分层。链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据;网络层:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发;

为无为,事无事,味无味。 2207

【LIN总线测试】——LIN主节点物理层测试

LIN总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,而这正是CAN总线的带宽和功能所不要求的部分。本章节主要介绍LIN主节点物理层如何测试?

测试领域技术分享 5532

转 浅谈Socket编程及Java实现

Java是一种可用于进行网络编程的语言,它提供了两种功能强大的网络支持机制:URL访问网络资源的类和用Socket通讯的类,来满足不同的要求。一是URL用于访问Internet网上资源的应用;另一种是针对client/server(客户端/服务器)模式的应用以及实现某些特殊的协议的应用,它的通讯过程是基于TCP/IP协议中传输层接口socket实现的。本文想简单的介绍一下Socket编程的Java

2725

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java的socket如何使用_浅谈JAVA中如何利用socket进行网络编程(一)

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方...

weixin_36048031的博客 853

假人有限元模型

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

关于JAVA Socket超时浅谈

转自:微点阅读 https://www.weidianyuedu.comJAVA Socket超时浅析套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户端用它初始一次连接。侦听套接字只能接收新的连接请求,不能接收实际的数据包。套接字是基于TCP/IP实现的,它是用来提供一个

xiaoweids的博客 3230

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java编程中socket作用_浅谈Java中如何利用socket进行网络编程(一)

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方...

weixin_34183908的博客 605

java中socket编程_浅谈JAVA中如何利用socket进行网络编程(一)

转自:http://developer.51cto.com/art/201106/268385.htmSocket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行...

weixin_39822629的博客 268

浅谈网络编程之Socket

前言 此文只是简单概述Socket,Java编程的使用方法,还请移步Java 网络IO编程 Socket Socket是用来连接网路,进行传输数据的工具,Scoket大致分为两种,TCP和UDP TCP: 服务端:创建Socket->绑定ip和端口号->接听连接->accept连接 客户端:创建Socket->connect服务器 在创建Socket的时候其实并不区...

Cappadocia_的博客 396

浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天

聊天,QQ,微信,陌陌很多的即时通讯的软件,不管是桌面端还是移动端,在当今社交的时代都是不可或缺的一部分。这时候说Socket和ServerSocket感觉有点老调重弹感觉,相信很多人早就知道如何使用了,而且利用这个通信原理可能已经开发出很多优秀的通信软件吧,但是我感觉这个对于刚接触java网络编程的人来说,学会Socket通信实现聊天软件,是必须的一步,了解其中的原理更是非常重要的一步,对,很多...

weixin_39214481的博客 1万+

浅谈JAVA中如何利用socket进行网络编程(一)

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。 在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键

u014510919的专栏 571

关于java socket机制浅谈

转自:微点阅读https://www.weidianyuedu.com JAVA Socket超时浅析 套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户端用它初始一次连接。侦听套接字只能接收新的连接请求,不能接收实际的数据包。 套接字是基于TCP/IP实现的,..

ysds20211402的博客 1219

浅谈java socket机制

转自:微点阅读 https://www.weidianyuedu.com JAVA Socket超时浅析 套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户端用它初始一次连接。侦听套接字只能接收新的连接请求,不能接收实际的数据包。 套接字是基于TCP/IP实现的..

ysds20211402的博客 588

浅谈Java---Socket

socket:https://blog.youkuaiyun.com/qq_16949707/article/details/79042455

曰业而安的博客 508
上一篇: 思想远远比知识更重要
下一篇: 网络聊天室的实现思想
kevin_long
博客等级 码龄20年 30粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值