Java中Socket 实现最简单的客户端与服务端通信

【java】 客户端与服务端Socket编程 Socket编程,简单来讲就是通讯的两个端点都是Socket服务,网络通信就是Socket通信,而Socket服务之间的数据传输本质上都是IO流传输。socket是java.net包下的类, 二:TCP 客户端和服务端 基于TCP的通信:首先,Server服务器端Listen监听指定的某个端口是否有连接请求,其次Client客户端向Server端发送Connect连接请求,最后Server端向Client端发回Acept接受消息。 Socket和ServerScoket,建立客户端和服务端,建立连接后 阅读详情

Java中Socket 实现最简单的客户端与服务端通信

引言:因为最近项目中要接入某通信协议接口,基于TCP/IP的socket接口。于是就在本地弄一个最简单的Socket 通信仅供学习。话不多说,直接开摆

客户端代码

package test;

import java.io.*;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Client {
    //java基础类方法的入口
    public static void main(String[] args)throws IOException {
        Socket socket=new Socket();
        //读取流超时的时间设置为3000
        socket.setSoTimeout(3000);
        //连接本地,端口2000;超时时间3000ms
        socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000),3000);
        System.out.println("发起服务器连接---------");
        System.out.println("客户端信息:"+socket.getLocalAddress()+" P:"+socket.getLocalPort());//打印本地服务器地址和本地端口号
        System.out.println("服务端信息:"+socket.getInetAddress()+" P:"+socket.getPort());
        try{
            //发送接收数据
            todo(socket);
        }catch (Exception e){
            System.out.println("出现异常关闭啦");
        }
        //释放资源
        socket.close();
        System.out.println("再见,客户端已退出");
    }
    //发送数据的方法
    private  static void todo(Socket client) throws IOException{
        //构建键盘输入流
        InputStream in=System.in;
        //把键盘输入流转换为BufferedReader
        BufferedReader input=new BufferedReader(new InputStreamReader(in,"UTF-8"));
        //得到Socket输出流(Client要发送出去给服务器的信息),并转换为打印流
        OutputStream outputStream = client.getOutputStream();
        PrintStream socketPrintStream=new PrintStream(outputStream);
        //得到Socket输入流(Server回复传入Client的信息),并转换为BufferedReader
        InputStream inputStream = client.getInputStream();
        BufferedReader socketBufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
        //判断Server是否想要退出,回复“bye”时是他想要结束对话
        boolean flag=true;
        do {
            //键盘读取一行
            String str = input.readLine();
            //发送到服务器,(通俗就是显示在输入处,在键盘上输入什么,屏幕显示什么)
            //String str = "003099999920220614100000M1S1C0x0a";
            socketPrintStream.println(str);
            //从服务器读取一行,即Server传入回复给Client的信息
            String echo = socketBufferedReader.readLine();
            if("bye".equalsIgnoreCase(echo)){
                flag=false;
            } else{
                //打印到屏幕上,Server回复什么就显示什么
                System.out.println("客户端回复:"+echo);
            }
        }while(flag);
        //资源释放,关闭对于socket资源
        socketPrintStream.close();
        socketBufferedReader.close();
    }
}

服务端代码

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
    public static void main(String[] args)throws IOException {
        ServerSocket server=new ServerSocket(2000);
        System.out.println("服务器准备就绪----------");
        System.out.println("服务器信息:"+server.getInetAddress()+" P:"+server.getLocalPort());
        //等待多个客户端连接,循环异步线程
        for(;;) {
            //得到客户端
            Socket client = server.accept();
            //客户端构建异步线程
            ClientHandler clientHandler = new ClientHandler(client);
            //启动线程
            clientHandler.start();
        }
    }
    /**
     * 客户端消息处理
     */
    //多个客户端需要做异步操作,建立异步处理类
    private static class ClientHandler extends Thread{//线程
        private  Socket socket;//代表当前的一个连接
        private boolean flag=true;
        ClientHandler(Socket socket){
            this.socket=socket;
        }//构造方法
        //一旦Thead启动起来,就会运行run方法,代表线程启动的部分
        @Override
        public void run(){
            super.run();
            //打印客户端的信息
            System.out.println("新客户端发起连接:"+socket.getInetAddress()+" P:"+socket.getPort());
            //在发送过程中会触发一个IO过程,所以需要捕获异常
            try {
                //得到打印流,用于数据输出,服务器回送数据使用,即在屏幕上显示Server要回复Client的信息
                PrintStream socketOutput=new PrintStream(socket.getOutputStream());
                //得到输入流,用于接收数据,得到Client回复服务器的信息
                BufferedReader sockeInput=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
                do {
                    //客户端回复一条数据
                    String str = sockeInput.readLine();
                    if("bye".equalsIgnoreCase(str)){
                        flag=false;
                        //回送
                        socketOutput.println("bye");
                    }else{
                        //打印到屏幕,并回送数据长度
                        System.out.println(str);
                        socketOutput.println("Server回答说:" +str.length());
                    }
                }while(flag);
                sockeInput.close();
                socketOutput.close();
            }catch (Exception e){
                //触发异常时打印一个异常信息
                System.out.println("连接异常断开!!!");
            }finally {
                //连接关闭
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("再见,客户端退出:"+socket.getInetAddress()+" P:"+socket.getPort());
        }
    }
}

然后先运行服务端类Server.java,然后再运行Client.java
在客户端控制台输入任意文字,按下回车键即可。

Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受 一、Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类ServerSocket, 你在实例化ServerSocket 的时候, 带一个整型数的构造方法,这个就是端口号 我们把端口号设置为8801, 这样子就把以前的繁杂的配置结束了 这面波浪线的意思,我们按下ctrl + ... 阅读详情

相关推荐

SpringBoot+SOCKET服务端客户端

通过以下两个类实现了springboot启动类,启动socket服务端 SOCKET客户端连接测试 模拟测试客户端连接-主测试类 可以使用线程池或者多个线程类start都可以就是我注释的地方 模拟监测服务心跳线程类 补充一下目录结构分布 是先启动springboot在启动客户端连接服务 服务端打印客户端发来的业务数据消息 客户端发送消息,并且接收服务端反馈的消息打印结果 我们开了两个客户端socket一个是心跳socket一个是业务socket 我们在客户端socket敲入任意信息可以在服务端输出打

weixin_43450799的博客 2万+

【Java EE】-网络编程(二) Socket(套接字) + Udp版本客户端服务器 +Tcp版本客户端服务器

传输层协议对应Socket编程,DatagramSocket,DatagramPacket,Udp版本的客户端和服务器,UdpEchoSever,UdpEchoClient,Udp版本的查词典服务器底层原理;Tcp版本的客户端和服务器,TcpEchoServer,TcpEchoClient。Tcp版本的服务器的几个要点。

m0_63979882的博客 2023

java 客户端与服务端通信

1、网络通信 网络通信是通过网络将各个孤立的设备进行连接,通过信息交换实现人与人,人与计算机,计算机与计算机之间的通信。 要素: ip 端口【1024~49151程序注册接口】 协议 * TCP:用户传输协议、可靠连接、三次握手四次分手【打电话】 * UDP:用户数据报协议、不可靠不稳定连接【发短信】 2、socket 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可...

qly的博客 4925

【Java】网络编程与Socket套接字、UDP编程和TCP编程实现客户端和服务端通信

网络编程,指网络上的主机,通过不同的进程以程序的方式实现网络通信(网络数据传输)。注意也可以是同一个主机的不同进程,比如,MySQL的服务端也客户端,在开发环境一般都是在同一台主机上运行的两个不同的程序。

qq_43243800的博客 3166

Java中使用socket实现客户端与服务端交互

Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务

一转身就是一辈子 1万+

Java-Socket服务端和多个客户端长连接

Socket 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 短连接 服务端和客户端建立连接后,客户端获取流来和服务端通讯,通讯完毕后,关闭流,关闭Soc...

P923284735的博客 8326

SpringBoot(23) 集成socket.io服务端和客户端实现通信

一、前言 websocket和socket.io区别? websocket 一种让客户端和服务器之间能进行双向实时通信的技术 使用时,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况 适合用于client和基于node搭建的服务端使用 socket.io 将WebSocket、AJAX和其它的通信方式全部封装成了统一的通信接口 使用时,不用担心兼容问题,底层会自动选用最佳的通信方式 适合进...

郑清 9849

用ServerSocket类与Socket类实现客户端与服务端的交互

ServerSocket类,此类实现服务端的套接字,Socket类,此类实现客户端的套接字,而套接字就是两台机器间通信的端点,所以就用ServerSocket类和Socket类实现客户端与服务端的交互,下面先来查看ServerSocket类的api 看到构造方法,首先想到要使用要先new一个,然后方法里可以绑定dao特定端口,这里以端口8888为例,创建一个服务端监听8888端口,然后获取连接着

Zero_zzq的博客 6663

java编写简单的Socket通信应用 实现服务端同时处理多个客户端

一、编写服务端代码 在本示例中,服务端主要作用是监听客户端的连接,获取客户端发送的数据。 第一步:编写服务端主启动类,代码很简单,new一个自定义SocketServerListenHandler类,构造器传入端口号,并启动监听方法listenClientConnect()执行监听客户端连接。注:它的职责仅仅是监听连接。 package com.io.socket.server; imp...

LJHSkyWalker的博客 1万+

JAVA Socket实现实时接收TCP消息,让你的服务端通信更高效!

本文主要介绍如何利用socket实现实时接收服务端发送的TCP消息。

猿小白的博客 5293

Java Socket编程:实现客户端与服务端通信示例

Java Socket编程是构建网络应用的核心技术之一,尤其在网络通信频繁的今天,理解和掌握Socket编程对于软件开发人员至关重要。本章节将简要介绍Socket的基本概念以及与TCP/IP协议的关联。

weixin_29138345的博客 1330

Socket介绍及使用Java实现socket通信

使用Java实现socket通信。

weixin_49561506的博客 2万+

Manimgl 进阶笔记

目录 一、调整视频输出的纵横比 二、调整预览窗口的尺寸 三、在开发工具中直接调试 一、调整视频输出的纵横比 调整输出视频的纵横比,在日常开发中属于比较基本的需求。要使用 Manimgl 得到期望的分辨率的视频输出需要修改以下几个地方: 第一步:在 custom_config.yml 配置文件中通过 camera_qualities设置视频的输出分辨率。manimlib 框架已经在 default_config.yml 文件中设置了四种视频输出分辨率,default_qualities 参数.

gunnery的专栏 2859

Java Socket实现客户端服务端相互发送文本

Socket是网络编程的接口,它抽象成线程之间的接口。两个线程,不管它的操作系统,不管它的硬件,只要有Socket接口,在同一主机中或者在不同的主机中都能通信。我们见到的大大小小的网络程序大多都是通过Socket实现的,比如游戏服务器,ftp服务器,浏览器等。所以理解Socket编程,是网络编程的的必修课。在本篇文章中我们将讲到用Socket实现简单的服务端与客户端互相传送纯文本的例子。

luoyesiqiu的专栏 1万+

手把手教你用Matlab/Simulink搭建PMSM的SMO无感FOC仿真(附相位补偿与离散化代码)

本文详细介绍了基于滑模观测器(SMO)的永磁同步电机(PMSM)无传感器FOC控制方法,通过Matlab/Simulink平台实现从理论到实践的完整流程。内容涵盖SMO核心原理、离散化处理、转子位置估算与相位补偿技术,以及双闭环控制系统搭建,为工程师提供了一套完整的无传感器控制解决方案。

weixin_27038245的博客 255

10、GPU发展历程:从光线追踪到网格着色器的技术革新

本文回顾了GPU的发展历程,重点探讨了从光线追踪到网格着色器的技术革新。涵盖了DirectX 12时代(2015-2020)光线追踪与AI结合的突破,包括NVIDIA的Volta架构、DLSS技术原理及可变速率着色的应用。随后介绍了DirectX 12 Ultimate时代(2020)网格着色器的引入,分析了其计算模型、细粒度控制能力及跨平台优势。最后总结了着色器的演变及GPU在多个领域的广泛应用。

ol789012345的博客 185

基于 Java 简单实现 Socket 通信

J3 - 白起 技术(TCP/IP # UDP # Socket) 最近开了个项目:https://gitee.com/j3_baiqi/communication 欢迎大家指点一下项目结构、编码问题、业务方向????????????????????????。 一、什么是 Socket 百科: 白话就是,基于网络通信协议所制定的交互接口(接口就是规范)。 既然是接口,那必然就有实现,所以本次所有讲述的就是用 Java 来实现的一种 Socket 通信。但实现之前还是要铺垫一下两个网络通信中的重要协议:

技术分享、唠嗑水文、如有不周、还望海涵 6310

2xmax96717+max96724+agx orin驱动代码

说明:这里主要解决max96717的设备地址和sensor地址映射,vc0->vc1多颗max96717+max96724使用配置思路如下: 1、改变max96717的pipez stream id,然后max96724的pipe绑定使用相应的stream id 2、max96717默认是vc0,把vc0改写成vc1\vc2\vc3,然后max96724再重新映射vc输出

mantouyouyou的博客 113

Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能。 以下代码可以直接拷贝到Eclipse中运行。 前面的两片文章都利用了socket实现了客户端与服务器的通信,我的前两片文章: Java中利用socket实现简单的服务端与客户端的通信(入门级),实现了一个简单的客户端发送消息,

确定有穷自动机 6413

置顶必读(2) |《YOLOv8实战:从入门到深度优化》总目录导航 & 学习路线指南(持续更新中)

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 28万+

Ceph入门到精通-存储桶通知

这 通知还可以根据前缀的匹配项过滤掉事件,并且 (1) 键的后缀,(2) 附加到对象的元数据属性, 或 (3) 对象标签。在此模式下,操作仅在以下之后确认(确认) 通知将发送到主题的已配置终端节点。这意味着 通知的往返时间(发送 通知主题的终端节点以及接收 确认)被添加到操作本身的延迟中。要更新主题,请使用用于创建主题的相同命令(但在 更新时,使用现有主题的名称和不同的终端节点值)。端口:对于未加密的连接,默认为 5672,对于未加密的连接,默认为 5671 SSL 加密连接。(默认情况下,这是“假的”。

隔壁老瓦的专栏 1131

java Socket通信,客户端与服务端相互发消息

1.通信过程网络分为应用层,http、ssh、telnet就是属于这一类,建立在传输层的基础上、其实就是定义了各自的编码解码格式,分层如下: 2.Socket连接上述通信都要先在传输层有建立连接的基础上才能完成,TCP通过三次握手建立连接: Socket与http的区别可以看下这个: https://www.cnblogs.com/meier1205/p/5971313.html 还有搜

hxshine的博客 7万+

Unreal 从入门到精通之VR常用操作

本文总结了使用Unreal5开发VR项目时遇到的常见问题及其解决方案。首先,介绍了如何通过VRPawn的TryTeleport函数设置玩家视角位置,确保头显移动时安全区域的正确传送。其次,详细说明了如何在Unreal中播放视频,包括导入视频文件、创建媒体播放器和媒体纹理,并将其应用到3D物体上。接着,讲解了如何播放VR全景视频,建议使用MediaPlate媒体板并调整几何体为球体。最后,讨论了如何手动打开和关闭VR模式,以便在PC模式和头显模式之间切换。这些方法为VR开发提供了实用的技术指导。

TxNet 952

基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

CWQLTYH的博客 1817

2026实测可用!4个专业AI Agent Skills垂直搜索平台对比

📊本文以表格形式整理4个实测可用的专业AI Agent Skills垂直搜索平台,涵盖资源规模、适配生态等关键维度🤖,适合开发者按需选择技能获取渠道,解决平台筛选与访问难题✨

XiaoqiangClub的博客 525

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

客户端与服务端Socket通信原理详解

socket客户端与服务端通信原理详解

繁华过后你还有我 9968

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 运行yum install -y mssql-server命令时报错:
C7G
C7G
博客等级 码龄9年 3粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值