TCP通讯

第二十一章 网络通信

本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点  这两种通讯方式不通的地方就是TCP是一对一通信  UDP是一对多的通信方式  接下来会一一讲解

TCP通信

TCP通信方式呢  主要的通讯方式是一对一的通讯方式,也有着优点和缺点  它的优点对比于UDP来说就是可靠一点  因为它的通讯方式是需要先发送消息 看看客户端是否能够接收到消息 如果没有回复消息的话 服务端  就不会发出文件 等待客户端回复消息,这个握手模式的话  就会非常可靠  以下代码进行讲解:

客户端代码:

package tcp;
 
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
 
/**
 * Socket客户端
 **/
public class SocketClient {
    public static void main(String[] args) {
        Socket s = null;
        try {
            // 与ip为127.0.0.1、端口为12345的服务端建立连接
            s = new Socket("127.0.0.1", 12345);
 
            // 创建输入流接收服务端发送的消息(字节流)
            InputStream is = s.getInputStream();
            // 将服务端返回的字节流转化为字符流
            InputStreamReader isr = new InputStreamReader(is);
            // 创建字符流读取缓冲区,方便每行读取
            BufferedReader br = new BufferedReader(isr);
 
            // 创建输出流返回消息
            OutputStream os = s.getOutputStream();
            // 创建输出流缓冲
            PrintWriter pw = new PrintWriter(os);
 
            // 创建发送消息的线程
            Runnable rOut = () -> {
                boolean flag = true;
                while (flag) {
                    try {
                        // 接收控制台输入
                        Scanner scan = new Scanner(System.in);
                        String msg = scan.nextLine();
                        // 将输入写入缓冲
                        pw.println(msg);
                        // 将缓冲内的数据推送至服务端并清空缓冲区
                        pw.flush();
                    } catch (Exception e) {
                        flag = false;
                        e.printStackTrace();
                    }
                }
            };
 
            // 创建接收消息的线程
            Runnable rIn = () -> {
                boolean flag = true;
                while (flag) {
                    try {
                        // 逐行读取服务端返回的消息并打印
                        String str = br.readLine();
                        System.out.println("服务端的消息:" + str);
                    } catch (IOException e) {
                        flag = false;
                        e.printStackTrace();
                    }
                }
            };
 
            // 启动两个线程
            Thread tOut = new Thread(rOut);
            Thread tIn = new Thread(rIn);
            tOut.start();
            tIn.start();
        }catch (IOException e) {
            try {
                // 释放资源
                s.close();
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            e.printStackTrace();
        }
    }
}

服务端代码:

package tcp;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
 
/**
 * Socket服务端
 **/
public class SocketServer {
    public static void main(String[] args) {
        ServerSocket ss = null;
        Socket s = null;
        try {
            // 创建监听端口为12345的Socket服务端
            ss = new ServerSocket(12345);
            System.out.println("服务端Socket服务已建立,等待客户端连接...");
            // 通过ss.accept()开始持续监听12345端口,当有连接时获取收到的包装成Socket的客户端对象
            s = ss.accept();
            // 获取客户端的IP地址和端口号
            String ip = s.getInetAddress().getHostAddress();
            int port = s.getPort();
            System.out.println("服务端与 " + ip + ":" + port + " 已建立连接");
 
            // 创建输入流接收客户端发送的消息(字节流)
            InputStream is = s.getInputStream();
            // 将客户端发送的字节流转化为字符流
            InputStreamReader isr = new InputStreamReader(is);
            // 创建字符流读取缓冲区,方便每行读取
            BufferedReader br = new BufferedReader(isr);
 
            // 创建输出流返回消息
            OutputStream os = s.getOutputStream();
            // 创建输出流缓冲
            PrintWriter pw = new PrintWriter(os);
 
            // 创建接受信息的线程
            Runnable rIn = () -> {
                boolean flag = true;
                while (flag) {
                    try {
                        // 逐行读取客户端发送的消息并打印
                        String str = br.readLine();
                        System.out.println("客户端的消息:" + str);
                    } catch (IOException e) {
                        flag = false;
                        e.printStackTrace();
                    }
                }
            };
 
            // 创建发送消息的线程
            Runnable rOut = () -> {
                boolean flag = true;
                while (flag) {
                    try {
                        // 接收控制台输入
                        Scanner scan = new Scanner(System.in);
                        String msg = scan.nextLine();
                        // 将输入写入缓冲
                        pw.println(msg);
                        // 将缓冲内的数据推送至客户端并清空缓冲区
                        pw.flush();
                    } catch (Exception e) {
                        flag = false;
                        e.printStackTrace();
                    }
                }
            };
 
            // 开启两个线程
            Thread tIn = new Thread(rIn);
            Thread tOut = new Thread(rOut);
            tIn.start();
            tOut.start();
        } catch (IOException e) {
            try {
                // 释放资源
                ss.close();
                s.close();
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            e.printStackTrace();
        }
    }
}

服务端代码图已经客户端的代码图:

IC..
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ModbusTCP通讯
qq_43029096的博客
03-29 4366
ModbusTCP协议
java与modbusTcp通讯
碎银几两能解世间惆怅
01-07 4759
java与modbus通讯用途 工厂中通讯模块大多数都用modbus或者opcua与plc建立通讯,实现工厂设备的控制及数据采集等 需要引入的jar文件 点击获取 依赖包文件 提取码 7gnz 点击获取 modbus测试工具 提取码 nm7j 建立通讯的代码 import com.serotonin.modbus4j.ModbusFactory; import com.serotonin.modbus4j.ModbusMaster; import com.serotonin.modbus
C# Tcp通讯
qq_42434073的博客
05-07 3382
服务器端 using System.Net.Sockets; using System.Net; Socket tcp=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); IPAdress ipAddress = new IPAddress(new byte[] { 192.168.1.155 }); IpEndPoint ipEndPoint =new IPEndPoint(ipAddress,7788);
python tcp通讯
雪剑封心
03-26 3580
服务端 """ TCP服务端函数示例 """ from socket import * # 创建tcp套接字 # 1.3.3 TCP客户端 tcp_socket = socket(AF_INET, SOCK_STREAM) # 绑定地址 tcp_socket.bind(("192.168.3.11", 8888)) # 设置为监听套接字 (等待队列数) tcp_socket.listen(5) # 等待客户端连接 while True: print("等待客户端连接...") # 返回值
Modbus TCP通讯协议
热门推荐
qq_45804685的博客
11-19 5万+
一、简介 Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。 Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。 标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。 二、ModbusTCP数据帧 ModbusTCP的数据帧可分为两部分:MBAP+PDU。 2.1 报文头MBAP
C#中的TCP通讯与UDP通讯
m0_62355555的博客
06-30 1670
最近做了一个项目,主要是给Unity3D和实时数据库做通讯接口。虽然方案一直在变:从开始的UDP通讯变为TCP通讯,然后再变化为UDP通讯;然后通讯的对象又发生改变,由与数据库的驱动进行通讯(主动推送数据给驱动,数据库中数据发生变化把数据以UDP报文形式发送客户端)改为与实时数据库进行直接通讯(自己发送报文修改数据库中的数据,自己请求需要获取的数据并接收自己请求的数据);现在这个项目基本完结,由于这个过程既接触到了UDP又接触到了TCP,现在对其进行一番总结。目录TCP通讯协议与UDP通讯协议的区别TCP
C#上位机:TCP通讯实例
weixin_43736127的博客
10-01 2095
TCP在C#上位机的应用示例
C#TCP通讯(Sockets类实现)
qq_951274168的博客
08-08 2419
文章目录TCPClientTCPserver 最终效果 TCPClient using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; u
AB PLC Modbus TCP通讯测试
zhigedali的博客
01-27 1万+
关于AB PLC Modbus TCP通讯测试
Halcon利用Socket实现TCP通讯
Douhaoyu的博客
12-14 1853
Halcon利用Socket实现TCP通讯
halcon TCP通讯
11-26
而"halcon TCP通讯"是指利用Halcon与外部设备或系统通过TCP(Transmission Control Protocol)进行通信的方式。TCP是一种面向连接的、可靠的传输协议,常用于网络应用程序,确保数据的正确性和顺序。 在Halcon中...
TCP通讯的C语言实现
02-24
在C语言中实现TCP通讯,我们需要利用套接字(socket)API,这是操作系统提供的用于网络编程的接口。 首先,创建TCP服务器端的过程包括以下步骤: 1. **创建套接字**:使用`socket()`函数创建一个套接字描述符,指定...
TCP和MODBUS-TCP通讯调试软件
03-15
在调试TCP和MODBUS-TCP通讯时,我们需要借助特定的工具。在这个压缩包中,包含两个名为“TCP客户端通讯V1.2.exe”和“TCP服务器通讯V1.2.exe”的文件,它们很可能就是用于测试TCP连接和MODBUS-TCP通信的软件。TCP...
labview tcp通讯
11-01
labview tcp通讯labview tcp通讯labview tcp通讯labview tcp通讯labview tcp通讯labview tcp通讯
两台设备的TCP通讯_Codesys的两台设备之前的TCP通讯_
09-28
本主题聚焦于两台设备间的TCP通讯,特别是在Codesys 3.5环境下如何实现这一功能。TCP(传输控制协议)是一种面向连接的、可靠的网络通信协议,广泛用于设备间的数据交换。 首先,要在Codesys中建立TCP通讯,你需要...
Kubernets Apiserver IP 段变更后的故障处理
MichaelJScofield的专栏
07-03 630
换 IP 段后,要及时生成新的 apiserver 的 Service ClusterIP 到证书 SANs 里。然后再重建。最后我把 kubernetes-services-endpoint configmap 的 IP 改为正确的 Service cluster IP 并重建了 calico-node。
Linux 网络抓包工具tcpdump编译
jingling122的博客
07-03 799
编译tcpdump时可能会遇到多种错误,但大多数错误都可以通过安装缺失的库和头文件、设置正确的编译参数或更新系统工具链来解决。仔细阅读错误输出,查找线索,并在必要时搜索在线资源以获取帮助。
板凳---------unix网络编程卷1:第四章 基本 TCP 套接字编程
最新发布
fengye207161的博客
07-06 513
本章中只考虑使用fork实施的每客户单进程模型服务器首先启动,稍后某个时刻客户启动,它试图连接到服务器。我们假设客户给服务器发送一个请求,服务器处理该请求,并且给客户发回一个响应。这个过程一直持续下去,直到客户关闭连接的客户端,从而给服务器发送一个EOF(文件结束)通知为止。服务器接着也关闭连接的服务器端,然后结束运行或者等待新的客户连接。
【Linux】TCP协议【下三】{面向字节流/粘包问题/TCP异常情况/文件和Socket}
A progressive ape!
07-03 1040
【Linux】TCP协议【下三】{面向字节流/粘包问题/TCP异常情况/文件和Socket}
atlas tcp通讯
11-23
Atlas TCP通讯通过TCP连接来实现数据的传输。在这种通讯方式中,通信的两个端点之间要先建立一个TCP连接,然后才能进行数据的传输。TCP连接的建立使用了三次握手的过程,保证了连接的可靠性。 在Atlas TCP通讯中,...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 根据身高体重计算BMI指数 752
  • Java的基本数据类型 495
  • TCP通讯 345
  • JAVA小游戏“飞翔的小鸟” 215
  • Java的变量与常量 204

最新评论

  • Eclipse下载与安装

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)增加内容的多样性(例如使用标准目录、标题、图片、链接、表格等元素);(2)增加除了各种控件外,文章正文的字数;(3)文章不宜太短。

  • Eclipse下载与安装

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)增加内容的多样性(例如使用标准目录、标题、图片、链接、表格等元素);(2)增加条理清晰的目录;(3)增加除了各种控件外,文章正文的字数。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • UDP通信
  • 第二十一章 网络通信
  • 第二十章Java博客
2023年49篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司民治网站推广工具吉祥seo网站推广坪山企业网站改版盐田SEO按天扣费坑梓至尊标王盐田百姓网标王推广荷坳网站推广工具观澜企业网站设计木棉湾百度标王平湖网站seo优化吉祥网站改版坪地网络推广坂田设计公司网站木棉湾关键词排名包年推广塘坑百度网站优化排名民治网站推广方案惠州百度竞价包年推广东莞建网站罗湖营销型网站建设南山网站建设设计南山百度关键词包年推广南山网页制作南山网站优化推广松岗seo优化龙华网站搜索优化吉祥网站改版福田关键词按天计费盐田建站荷坳外贸网站设计坪山设计公司网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化