Java的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 阅读详情

Java的Socket编程

网络编程

目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。

在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。

而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。

目前网络编程的核心问题有两个:1.快速定位客户端;2.高效的传递数据

传输协议TCP和UDP

TCP是Tranfer ControlProtocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是serversocket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

 

UDP是User DatagramProtocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

 

比较:TCP和UDP

 

UDP:

1.数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。

2.UDP传输数据时是有限制的,每个被传输的数据报必须限定在64KB之内。

3.UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方

 

TCP:

1.面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接时间。

2.TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的数据。

3.TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。

基于Socket的网络编程

什么是Socket

 

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

 

Socket构造方法

java在包java.NET中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。造方法如下:

  Socket(InetAddress address, int port);

  Socket(InetAddress address, int port, boolean stream);

  Socket(String host, int prot);

  Socket(String host, int prot, boolean stream);

  Socket(SocketImpl impl)

  Socket(String host, int port, InetAddress localAddr, int localPort)

  Socket(InetAddress address, int port, InetAddress localAddr, intlocalPort)

  ServerSocket(int port);

  ServerSocket(int port, int backlog);

  ServerSocket(int port, int backlog, InetAddress bindAddr)

 

其中address、host和port分别是双向连接中另一方的IP地址、主机名和端口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和 bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可以用来创建Socket。count则表示服务端所能支持的最大连接数。

 

选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。

 

在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。

 

Socket使用流程

服务器基本步骤:

1.指定端口实例化一个SeverSocket

2.调用ServerSocket的accept()方法,以在等待连接期间造成阻塞

3.获取位于该底层的Socket的流以进行读写操作

4.将数据封装成流

5.对Socket进行读写

6.关闭打开的流

 

客户端基本步骤:

1.通过IP地址和端口实例化Socket,请求连接服务器

2.获得Socket上的流以进行读写

3.把流封装进BufferedReader/PrintWriter的实例

4.对Socket进行读写

5.关闭打开的流

使用案例

服务端

package com.cloud.socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.Net.ServerSocket;
import java.net.Socket;
/**
 * 模拟服务器
 */
public class Server {
   public static void main(String[] args) {
      try {
        String line;
        ServerSocket serverSocket = null;
        try {
           //监听8888的端口请求
           serverSocket = new ServerSocket(8888);
        } catch (Exception e) {
           e.printStackTrace();
        }
        Socket socket = null;
        try {
           //等待客户端请求
           socket = serverSocket.accept();
        } catch (Exception e) {
           e.printStackTrace();
        }
        BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter os=new PrintWriter(socket.getOutputStream());
        BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Client:"+is.readLine());
        line = sin.readLine();
        while(!line.equals("close")){
           os.println(line);
           os.flush();
           System.out.println("Server:"+line);
           System.out.println("Client:"+is.readLine());
           line = sin.readLine();
        }
        os.close();
        is.close();
        serverSocket.close();
        socket.close();
      } catch(Exception e){
        e.printStackTrace();
      }
   }
}


客户端

package com.cloud.socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MyServer {
   public static void main(String[] args) {
      try {
        String readline;
        Socket socket = new Socket("192.168.200.55", 8888);
        BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
        PrintWriter os=new PrintWriter(socket.getOutputStream());
        BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        readline=sin.readLine();
        while(!readline.equals("close")){
           os.println(readline);
           os.flush();
           System.out.println("Client1:"+readline);
           System.out.println("Server1:"+is.readLine());
           readline=sin.readLine();
        }
        os.close();
        is.close();
        socket.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
   }
}


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

相关推荐

【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的博客 952

多年总结,学编程的一些核心建议

大家好,我是yes。 不知道你们是如何踏上编程之路的,我是因为被电影里的骇客吸引,才选择了软工专业(其实是第二专业,哈哈)。本以为日后可以像电影里面的骇客那般啪啪啪的就把一栋楼的灯给灭了,弹指间即操纵肉鸡进行攻击。 谁知到头来成了一位 CRUD Boy。不过万幸,最终我还是热爱编程的,从一开始的懵懵懂懂,到现在入了行,编程这个字可以说已经深深地刻在我的脑海里。 既然已经踏上这条路了,那就好好的走下去吧,也学习编程多年了,今儿就来说说我个人认为的学编程的一些核心建议吧,抛砖引玉,欢迎讨论~ 善于搜索 不论是初

yes 612

浅谈Socket编程及Java实现

浅谈Socket编程及Java实现,学习java socket编程

Java中Socket编程

Java的Socket编程 网络编程 目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。 在TCP/IP协议中IP层主要负责网络主机的定位,数据传

午-夜 247

QT-使用ECharts显示地图,还有更多惊艳的图表等待你的使用

QT-使用ECharts显示地图前言一、使用步骤1.下载示例2. QT使用HTML文件配置3.使用HTML文件4. 数据交互及自适应总结注意:这个地图是百度的在线地图,需要百度API密钥和在联网的状态下使用。离线使用图表 前言 我上文QT图表chart-饼状图,使用qt自带的图表库charts来显示图表,实现数据可视化,但是QT自带的图表库显示效果并不佳,通俗说,就是不好看。 然而,有这么一个开源图表库,图表种类极多,并且效果良好,能够实现具有很好的视觉冲击的数据可视化。 它就是Apache ECharts

博咯的博客 4898

jenkins安装、打包、部署

一个可以让小白部署发布项目的软件;git 配置 一定要配置git的命令路径jenkins启动命令,一定要加这一段 -Dhudson.util.ProcessTree.disable=true一定要配置jenkins的节点,BUILD_ID和DONTKILLME 否则会导致打包后,会将运行的java程序进程也杀死创建任务SSH中执行服务器B的命令的时候,cd /opt;一定要cd 打开那个目录,否则文件无法传输过去。

学海无涯,我用JAVA 5217

c语言如果是字母输出yes,用C语言编写一个程序 判断一个数是否是整数,如果是整数则输出“Yes”,否则输出“No” 我的错在哪...

#include int main(){int y,m,d;printf("请输入年月日,中间用逗号隔开!\n");scanf ("%d,%d,%d",&y,&m,&d); /*这地方打错一个%*/switch (m){case 1:case 3:case 5:case 7:case 8:case 10:if(d>0&&d<=30)d=d+...

weixin_35070925的博客 2832

智能客服系统知识库构建:长尾问题解决方案全解析

智能客服系统知识库构建:长尾问题解决方案全解析

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 4112

Java Socket 编程详解

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

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

AI算力瓶颈与系统优化实战指南

AI算力瓶颈已成为制约人工智能发展的关键因素,特别是在处理transformer类模型时,传统的冯·诺依曼架构面临严重的'内存墙'问题。通过硬件加速、系统优化和算法改进的三级策略,可以有效提升资源利用率。在嵌入式AI领域,结合量化、剪枝和专用指令集扩展等技术,能在资源受限设备上实现高效推理。这些优化方法在自动驾驶、工业视觉等场景中已展现出显著价值,推动AI应用从云端向边缘迁移。随着AI算力需求的持续增长,掌握系统优化技能将成为开发者的核心竞争力。

weixin_32597009的博客 342

40-基于STM32与LD3320的智能语音调光台灯开发全攻略(代码+硬件+调试心得)

本文详细介绍了基于STM32与LD3320的智能语音调光台灯开发全攻略,包括硬件设计、软件实现和调试心得。项目利用STM32单片机控制LD3320语音识别模块,实现语音控制开关和PWM调光功能,适合非接触式操作场景。文章还分享了硬件选型、PWM调光算法优化及常见问题解决方案,为开发者提供完整参考。

weixin_29163797的博客 325

Java中的Socket编程详解

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

上进!努力!!! 7536

【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展,带操作系统FreeRTOS)

【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展) 文章目录【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展)1. 相关连接1.1 本项目相关连接1.2 无操作系统简易版(旧版,有OneNET云平台设备创建和应用配置,本文不再赘述):2. 具体功能3. 硬件环境4. 云平台环境配置5. 接线6. 功能展示6.1 数据流6.2 APP应用管理6.3 串口数据7. 源码详解7.1 源码文件解析7.2 服务器与wifi配置相关7.3 源码框架7.4

ssssadw的博客 2万+

JAVA—socket编程

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

皮皮治不痞痞 1万+

基于Simulink进行双向DC-DC变换器的仿真建模

特点双向性:可以将能量从一个电压等级转换到另一个,且方向可逆。效率高:通过合理的控制策略减少能量损失。应用广泛:如电池管理系统、混合动力汽车等。挑战拓扑选择:根据应用场景选择合适的电路结构(如buck-boost、full-bridge等)。控制策略:确保高效稳定运行的同时,适应负载变化。热管理:有效散热以保持长期可靠性。首先明确要模拟的任务内容。设计一个能够支持双向能量传输的变换器。根据输入输出电压要求确定合适的变换器拓扑。实现有效的控制策略来维持输出电压稳定。

xiaoheshang_123的博客 367

《从理念到落地:Claude Code 在真实项目中的深度实践指南》基于 Anthropic 团队内部使用经验的扩展与深度解读,一篇面向工程团队的全面实践手册

Claude Code 支持通过# 创建新的 API 端点根据以下输入创建完整的 API 端点:资源名称:$ARGUMENTS请创建以下文件:1. `src/routes/{resource}.routes.ts` - 路由定义2. `src/controllers/{resource}.controller.ts` - 控制器3. `src/services/{resource}.service.ts` - 服务层。

AI天才研究院 484

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java语言的Socket编程

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

2501_91366151的博客 613

蓝牙模块HM-10手册

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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的博客 1769

Java Socket编程

Socket(套接字)是网络通信的抽象端点,是支持TCP/IP协议的网络通信的基本操作单元。在Java中,Socket和ServerSocket类分别用于客户端和服务器端的网络通信。// 服务器端创建ServerSocket// 客户端创建Socket连接Socket基础:理解Socket的基本概念和通信机制是网络编程的基础多线程必要性:为支持并发连接,必须使用多线程处理Socket传统多线程的局限:线程创建销毁开销大、管理复杂、稳定性差线程池的优势:资源复用、提高响应速度、更好的可管理性。

Aayu_的博客 1194

Java socket编程

要实现两个设备间通过 Socket 进行数据传输,通常需要创建一个服务器端和一个客户端程序。 心跳(Heartbeat) 是一种用于检测连接是否仍然有效的机制,而心跳包(Heartbeat Packet) 则是实现这种机制所发送的特殊数据包。重连机制是构建健壮网络应用的关键组件,合理的重连策略能显著提升用户体验和系统稳定性。

qq_74798973的博客 1299

java socket编程

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

G_O_O_D的专栏 1195
上一篇: JDBC的PreparedStatement用法
下一篇: Java中IO流操作文件总结
Yes_JiangShuai
博客等级 码龄10年 149粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值