关于Java Socket编程的详细介绍

Unity商业游戏底层加载框架一 本模块主要讲解: AssetBundle打包管理; 类对象池和资源对象池; 离线数据及配置表; 使用框架制作简单的UI; 预备知识了解 程序集(可以自行网上查找了解); unity资源加载方式(1,拖到组件上 2,Resources.load 3,AssetBundle 4,AssetDataBase.LoadAtPtah); c#的xml序列化 1,类转成xml 2,以及转成二进制; unity asset序列化; xml序列化与反序列化例子 //要序列... 阅读详情

事实上网络编程简单的理解就是两台

计算机相互通讯数据而已.对于 程序员 而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了。 Java  SDK提供一些相对简单的Api来完成这些工作。Socket就是其中之一。对于Java而言,这些Api存在与java.net 这个包里面。因此只要导入这个包就可以准备网络编程了。

  网络编程的基本模型就是客户机到服务器 模型。简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置,并去建立两者之间的联系。然后完成数据的通讯就可以了。这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端。基于这个简单的模型,就可以进入网络编程啦。

  Java对这个模型的支持有很多种Api。而这里我只想介绍有关Socket的编程接口。对于Java而言已经简化了Socket的编程接口。首先我们来讨论有关提供固定位置的服务方是如何建立的。Java提供了ServerSocket来对其进行支持,事实上当你创建该类的一个实力对象并提供一个端口资源 你就建立了一个固定位置可以让其他计算机来访问你。ServerSocket server=new ServerSocket(6789);这里稍微要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的。另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的。好了,我们有了固定位置.现在所需要的就是一根连接线了。该连接线由客户方首先提出要求。因此Java同样提供了一个Socket对象来对其进行支持。只要客户方创建一个Socket的实例对象进行支持就可以了。Socket client=new Socket(InetAddress.getLocalHost(),5678);客户机必须知道有关服务器的IP地址。对于着一点Java也提供了一个相关的类InetAddress。该对象的实例必须通过它的静态方法来提供。它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法。

  好了.上面的方法基本可以建立一条连线让两台计算机相互交流了。可是数据是如何传输的呢?事实上I/O操作总是和网络编程息息相关的。因为底层的网络是继续数据的,除非远程调用,处理问题的核心在执行上。否则数据的交互还是依赖于IO操作的.所以你也必须导入java.io这个包。java的IO操作也不复杂,它提供了针对于字节流和Unicode的读者和写者,然后也提供了一个缓冲用于数据的读写。

  BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
  PrintWriter out=new PrintWriter(server.getOutputStream());

  上面两句就是建立缓冲并把原始的字节流转变为Unicode可以操作。而原始的字节流来源于Socket的两个方法。getInputStream()和getOutputStream()方。分别用来得到输入和输出。那么现在有了基本的模型和基本的操作工具。我们可以做一个简单的Socket例程了。

  服务方:

  import java.io.*;
  import java.net.*;
  public class MyServer {
  public static void main(String[] args) throws IOException{
  ServerSocket server=new ServerSocket(5678);
  Socket client=server.accept();
  BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
  PrintWriter out=new PrintWriter(client.getOutputStream());
  while(true){
  String str=in.readLine();
  System.out.println(str);
  out.println("has receive....");
  out.flush();
  if(str.equals("end"))
  break;
  }
  client.close();
  }
  }

  这个程序的主要目的在于服务器不断接收客户机所写入的信息只到。客户机发送"End"字符串就退出程序。并且服务器也会做出"Receive"为回应。告知客户机已接收到消息。

  客户机代码:

  import java.net.*;
  import java.io.*;
  public class Client{
  static Socket server;
  public static void main(String[] args)throws Exception{
  server=new Socket(InetAddress.getLocalHost(),5678);
  BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
  PrintWriter out=new PrintWriter(server.getOutputStream());
  BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
  while(true){
  String str=wt.readLine();
  out.println(str);
  out.flush();
  if(str.equals("end")){
  break;
  }
  System.out.println(in.readLine());
  }
  server.close();
  }
  }

  客户机代码则是接受客户键盘输入,并把该信息输出,然后输出"End"用来做退出标识。

        这个程序只是简单的两台计算机之间的通讯。如果是多个客户同时访问一个服务器 呢?你可以试着再运行一个客户端,结果是会抛出异常的。那么多个客户端如何实现呢?

  其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身。而服务器通过accept方法就是同意和客户建立通讯。这样当客户建立Socket的同时。服务器也会使用这一根连线来先后通讯。那么既然如此只要我们存在多条连线就可以了。那么我们的程序可以变为如下:

  服务器:

  import java.io.*;
  import java.net.*;
  public class MyServer {
  public static void main(String[] args) throws IOException{
  ServerSocket server=new ServerSocket(5678);
  while(true){
  Socket client=server.accept();
  BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
  PrintWriter out=new PrintWriter(client.getOutputStream());
  while(true){
  String str=in.readLine();
  System.out.println(str);
  out.println("has receive....");
  out.flush();
  if(str.equals("end"))
  break;
  }
  client.close();
  }
  }
  }

  这里仅仅只是加了一个外层的While循环。这个循环的目的就是当一个客户进来就为它分配一个Socket直到这个客户完成一次和服务器的交互,这里也就是接受到客户的"End"消息。那么现在就实现了多客户之间的交互了。但是问题又来了。这样做虽然解决了多客户,可是是排队执行的。也就是说当一个客户和服务器完成一次通讯之后下一个客户才可以进来和服务器交互,无法做到同时服务。那么要如何才能同时达到既能相互之间交流又能同时交流呢?很显然这是一个并行执行的问题了。所以线程是最好的解决方案。

  那么下面的问题是如何使用线程.首先要做的事情是创建线程并使得其可以和网络连线取得联系,然后由线程来执行刚才的操作,要创建线程要么直接继承Thread要么实现Runnable接口,要建立和Socket的联系只要传递引用就可以了,而要执行线程就必须重写run方法。而run方法所做的事情.就是刚才单线程版本main所做的事情。因此我们的程序变成了这样:

  import java.net.*;
  import java.io.*;
  public class MultiUser extends Thread{
  private Socket client;
  public MultiUser(Socket c){
  this.client=c;
  }
  public void run(){
  try{
  BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
  PrintWriter out=new PrintWriter(client.getOutputStream());
  //Mutil User but can't parallel
  while(true){
  String str=in.readLine();
  System.out.println(str);
  out.println("has receive....");
  out.flush();
  if(str.equals("end"))
  break;
  }
  client.close();
  }catch(IOException ex){
  }finally{
  }
  }
  public static void main(String[] args)throws IOException{
  ServerSocket server=new ServerSocket(5678);
  while(true){
  //transfer location change Single User or Multi User
  MultiUser mu=new MultiUser(server.accept());
  mu.start();
  }
  }
  }

  我的类直接从Thread类继承了下来。并且通过构造函数传递引用和客户Socket建立了联系。这样每个线程就有了一个通讯管道,同样我们可以填写run方法,把之前的操作交给线程来完成。这样多客户并行的Socket就建立起来了。

【Java TCP/IP Socket】Socket编程大合集 为了方便各位网友学习以及方便自己复习之用,将Java TCP/IP Socket编程系列内容按照学习顺序总结如下: 【Java TCP/IP Socket】Java TCP Socket程编程 【Java TCP/IP Socket】Java UDP Socket编程 【Java TCP/IP Socket】应用程序协议中消息的成帧与解析 【Java TCP/IP Socket】构建和解析自定义协议消息 【Java TCP/IP Socket】基于线程池的TCP服务器 【Java TCP/IP 阅读详情

相关推荐

Socket 简介与 Java Socket 编程示例

基本概念:Socket可以被视为网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点。它是应用程序通过网络协议进行通信的接口,上联应用进程,下联网络协议栈。物理与逻辑层面:在物理层面上,Socket可能并不真实存在,它更多的是一个逻辑上的概念。但在网络编程中,Socket是不可或缺的组成部分。Socket是网络通信中的核心组件之一,它提供了应用层进程之间进行数据交换的机制。通过Socket,不同主机上的应用进程可以建立连接并传输数据。

yuiezt的专栏 3139

Java Socket 编程详解

Socket 指的是“插座”,是应用层与传输层之间的桥梁,用于在网络上进行双向通信。在 Socket 编程中,客户端与服务器之间的通信需要通过 Socket 进行实现。客户端通过 Socket 向服务器发送请求,服务器接收请求后返回响应,完成整个通信过程。Java Socket 编程是一种基于网络通信的编程方式,可以实现客户端与服务器之间的双向通信。在 Socket 编程中,需要使用 Socket 和 ServerSocket 两个类来实现网络通信,同时还需要考虑网络负载和异常情况等问题。

兴趣是最好的老师,勤能补拙 3521

【Socket】Java Socket编程基础及深入讲解

 Socket是Java网络编程的基础,了解还是有好处的,   这篇文章主要讲解Socket的基础编程。Socket用在哪呢,主要用在进程间,网络间通信。本篇比较长,特别做了个目录: 一、Socket通信基本示例 二、消息通信优化 2.1 双向通信,发送消息并接受消息 2.2 使用场景 2.3 如何告知对方已发送完命令 2.3.1 通过Socket关闭 2.3.2 通过Socket关闭输出流的方式 2.3.3 通过约定符号 2.3.4 通过指定长度 三、服

slw213106的博客 951

JAVA—socket编程

socket编程,是在不同的进程间进行网络通讯的一种协议,在socket编程中基于TCP、UDP等协议做的一层封装,是一套系统所提供的的用于进行网络通信的编程接口。

皮皮治不痞痞 1万+

jetson agx orin开箱及接口介绍

jetson agx orin开箱及接口介绍

qq_58728069的博客 1万+

【多元统计分析】均值向量和协方差阵的检验——spss上机实验

均值向量和协方差阵的检验——spss上机实验 #参考书目为《多元统计分析》(第五版)——何晓群.中国人民大学出版社 #如有错误,请指正!谢谢~ #关注公众号搜索同名文章获取数据~ 习题2.3 现选取内蒙古、广西、贵州、云南、西藏、宁夏、新疆、甘肃和青海等9个内陆边远省区。选取人均GDP、第三产业比重、人均消费支出、人口自然增长率及文盲半文盲人口占15岁以上人口的比例等5项能较好的说明各地区社会经济发展水平的指标,验证边远及少数民族聚居区的社会经济发展水平与全国平均水平间有无显著差异。 将输入导入spss

suansuannainaizi的博客 3万+

Java Socket编程

事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了。Java SDK提供一些相对简单的Api来完成这些工作。Socket就是其中之一。对于Java而言,这些Api存在与java.net 这个包里面。因此只要导入这个包就可以准备网络编程了。    网络编程的基本模型就是客户机到服务器模型。简单的说就是两个进程之间

dichyzhu的专栏 586

GD32H7实战:5步搞定YOLO轻量化模型部署到MCU(附避坑指南)

本文详细介绍了如何将YOLO轻量化模型部署到GD32H7 MCU的完整实战流程。通过五个关键步骤,涵盖环境搭建、模型训练、格式转换到工程集成,并重点分享了使用GD32AI-ModelZoo工具链进行MCU部署的避坑指南,帮助开发者在资源受限的边缘设备上实现高效目标检测。

weixin_29070861的博客 445

Java 网络编程 —— Socket 详解

摘自《Java 网络编程核心技术详解》

低吟不作语的博客 5001

大疆sdkV4以及V5webrtc推流

webrtcSDK中要用它的VideoCapturer来初始化推流 ViewdoCapturer是一个接口我们继承它 然后重建创建文件CapturerAircraft.java文件。CameraUtil.java这个是我们用来创建CapturerAircraft的一个工具。除了CapturerAircraft这个文件不一样外其他都是一样的。PlayBodyBean.java这个是我们的配置文件。下面的有个代码块第一个是v4的 第二个是v5的。接着我们来创建几个推流用到的webrtc工具。

weixin_41624865的博客 1187

基于STM32H750的便携式双通道示波器与信号发生器AFE设计

示波器和信号发生器是电子测量与嵌入式系统调试的基础仪器,其核心在于模拟前端(AFE)对宽动态范围、高精度采样与低失真输出的协同实现。原理上需兼顾输入信号调理(衰减/放大/偏置)、ADC/DAC接口匹配、触发同步及电源完整性设计。技术价值体现在以低成本器件达成±15V输入/±10V输出、16位等效采样精度与85kHz带宽的工程平衡。典型应用场景包括电机驱动波形观测、传感器信号验证、电源环路测试及通信电平分析。本方案聚焦STM32H750平台,深度融合硬件拓扑与片上资源特性,为嵌入式教学与原型开发提供可复现、易

weixin_35755188的博客 107

Java中的Socket编程详解

Socket(套接字)是网络通信的端点,允许在两台计算机之间通过网络进行数据交换。Socket是网络编程中必不可少的一部分,它建立在TCP/IP协议上,用于管理连接、传输数据。客户端Socket:用于连接远程服务器。服务器Socket:用于侦听客户端请求并与其建立连接。Java中的Socket编程通过和Socket类可以轻松实现客户端与服务器之间的通信。在实际开发中,Socket编程通常用于构建底层网络协议的基础。通过本文的示例,你应该对Java中的Socket编程有了基本的了解。

上进!努力!!! 7536

JSON 与 JSON-RPC 的区别

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于文本,采用人类可读的语法来表示结构化数据。它起源于JavaScript,但如今已被几乎所有主流编程语言支持。标准文档:RFC 4627数据类型:支持 String、Number、Boolean、Null、Object、Array 六种基本类型格式示例"name": "张三","age": 30,JSON-RPC(JSON Remote Procedure Call)是一种远程过程调用(RPC)协议。

h a 6 6 6 c k 为 你解决复杂难题! 144

Java语言的Socket编程

在网络编程中,Socket是一种非常重要的通信机制,它是支持TCP/IP协议的基本操作单元。Java语言作为一种面向对象的编程语言,提供了强大的Socket编程支持,使得开发网络应用程序变得更加简单和高效。本文将详细介绍Java中的Socket编程,包括Socket的工作原理、常用类及方法示例、Socket通信的实现步骤,以及在实际项目中的应用场景。

2501_91366151的博客 613

SAP 关于替代料物料混用问题处理方案简介

电子料很多都是需要进行替代的,并且需要考虑当A物料库存不足时,需要考虑B物料的库存来满足需求,当需求不满足的时候也需要考虑物料的价格因素,同时考虑价格低的物料进行采购。3、还遇到过比较奇葩的处理替代料的解决方案就是将SAP系统中的需求数据用接口的方式全部传输到外围系统,同时还将所有物料的库存信息都通过接口的方式传输到外围系统中,然后通过外围系统进行替代料逻辑的处理,然后在回写回SAP更改BOM中的优先级,然后在重新下单,貌似解决了替代料的问题,但是好像又没有解决。时间:2024-01-27。

我小时候很黑的博客 2348

SAP 标准 CDS View 到底能不能用 CDS Extension View 扩展,我们在项目里应该这样判断

文章摘要:判断SAP标准CDS视图(如A_PRODUCT)能否扩展字段,不能仅凭命名或@Metadata.allowExtensions判断,需检查DDL源码中的@AbapCatalog.viewEnhancementCategory值。#PROJECTION_LIST允许扩展字段,#NONE则禁止。聚合视图需额外包含#GROUP_BY,UNION视图需#UNION。CDS View Extension用于新增字段,Metadata Extension仅用于添加注解。在ABAP Cloud环境中还需检查AP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 98

Java的Socket编程

  java.net包中提供了UDP和TCP这两种常见的网络协议的支持。 Socket编程   套接字使用TCP提供了两台计算机之间的通信机制。客户端程序创建一个套接字,并尝试连接服务器的套接字。当连接建立时,服务器会创建一个Socket对象。客户端和服务器现在可以通过对Socket对象的写入和读取来进行通信。   java.net.Socket类代表一个套接字,并且java.net.ServerSocket类为服务器程序提供了一种来监听客户端,并与它们建立连接的机制。   以下步骤在两台计算机之间使用套接

健身房 3894

蓝牙模块HM-10手册

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

java socket编程总结

java socket编程总结说明一、TCP/IP协议模型二、获取IP相关信息InetAddressInetSocketAddressURL三、TCP编程四、UDP编程五、关于TCP与UDP 说明 更新时间:2020/12/01 17:17,更新完基本内容 java的socket编程做一个总结,主要是面向Tcp和Udp编程 注意:本文仅为记录学习轨迹,如有侵权,联系删除 一、TCP/IP协议模型 在学习socket编程之前有必要复习一下TCP/IP协议模型,模型图片如下,注意,OSI是国际定义的协议,但是现

最强菜鸟 3418

SAP B1中文培訓教材_SDK

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

WINCC7.3破解文件

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

Java Socket编程实例

Java Socket编程笔记 (注:需要 Java IO相关的知识) 1.使用 TCP 连接的demo 需要用到 java.net.Socket  和 java.net.ServerSocket ,具体可以查询 API 文档 创建 Sever 类和 Client 类作为 demo Server类的实现: import java.io.*; import java.ne

link98 3105

java创建socket编程_Java Socket编程

Socket编程一、网络基础知识(参考计算机网络)关于计算机网络部分可以参考相关博客:《TCP/IP协议栈及OSI参考模型详解》1、两台计算机间进行通讯需要以下三个条件:IP地址、协议、端口号2、TCP/IP协议:是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族、或TCP/IP协议栈TCP:Transmission Control Proto...

weixin_34364310的博客 1768

【Socket编程一】Java Socket编程入门介绍

Java Socket编程入门介绍 1 计算机之间通信条件 在介绍Socket之前先简单介绍下计算机之间通讯所需要的条件:IP地址,协议,端口号。 IP地址:为实现网络中不同计算机之间的通信,每台计算机都必须有一个唯一的标识---IP地址。     举个例子,在电话通讯中,电话用户是靠电话号码来识别的。同样,在网络中为了区别不同的计算机,也需要给计算机指定一个连网专用号码,这个号码就是“I

noaman_wgs的博客 1073

java socket编程例子_Java Socket 编程

Overviewsocket编程旨在通过网络让运行再不同的电脑上的程序能相互通讯。socket编程中有两种通讯协议:TCP 和 UDP。下面将介绍据于TPC/IP**的教程,使用Java编写客户端/服务器(C/S)应用程序。学这个教程前, 你应该已经知道:基本的计算机网络Java IO的基本操作java 多线程的基本操作单元测试源代码请见github简单例子让我们弄清楚这些客户端和服务器最基本的...

weixin_39919195的博客 517

java socket编程

一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。 目前较为

G_O_O_D的专栏 1195
上一篇: org.apache.xalan.processor.TransformerFactoryImpl not found
下一篇: java socket和多线程(Thread)实例
vimly
博客等级 码龄22年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值