TCP/UDP实现相同聊天功能的代码

laravel+gatewayworker(workerman)+vue实现用户聊天功能 git地址:https://gitee.com/hzbskak/laravel_worker 环境 PHP 7.4.19、Laravel Framework 5.8.38、mysql Ver 14.14 Distrib 5.7.33 下载laravel composer create-project --prefer-dist laravel/laravel laravel_worker "5.8.*" 下载gatewayworker https://www.workerman.net/downlo. 阅读详情
注意:此代码完全是以入门水平为标准,内部有许多值得优化的地方,但作为了解TCP/UDP的功能还是可以的。
实际代码一定要进行优化,至少要启用线程。

UDP的实现部分 原文: http://www.java2000.net/p10504

接收代码
  1. package chat;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. import java.net.InetAddress;
  5. /**
  6.  * UDP 接收数据的代码。
  7.  * 
  8.  * @author 赵学庆 www.java2000.net
  9.  */
  10. public class UDPReceiveTest {
  11.   void display() {
  12.     byte buf[] = new byte[256];
  13.     DatagramPacket sPacket;
  14.     DatagramPacket rPacket;
  15.     DatagramSocket socket;
  16.     int count;
  17.     byte[] res = "OK".getBytes();
  18.     try {
  19.       socket = new DatagramSocket(8888);
  20.       while (true) {
  21.         rPacket = new DatagramPacket(buf, buf.length);
  22.         // 接收数据报
  23.         socket.receive(rPacket);
  24.         // 获取发送方的地址
  25.         InetAddress addr = rPacket.getAddress();
  26.         // 获取发送方的端口
  27.         int port = rPacket.getPort();
  28.         count = rPacket.getLength();
  29.         System.out.println("接收到来自 " + addr.getHostAddress() + " 数据:");
  30.         System.out.println(new String(buf, 0, count));
  31.         // 发送数据报
  32.         sPacket = new DatagramPacket(res, res.length, addr, port);
  33.         socket.send(sPacket);
  34.       }
  35.     } catch (Exception e) {
  36.       System.out.println(e);
  37.     }
  38.   }
  39.   public static void main(String[] args) {
  40.     UDPReceiveTest app = new UDPReceiveTest();
  41.     app.display();
  42.   }
  43. }
发送代码
  1. package chat;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. import java.net.InetAddress;
  5. /**
  6.  * UDP 发送数据的代码。
  7.  * 
  8.  * @author 赵学庆 www.java2000.net
  9.  */
  10. public class UDPSendTest {
  11.   public static void main(String[] args) {
  12.     UDPSendTest app = new UDPSendTest();
  13.     app.display();
  14.   }
  15.   void display() {
  16.     byte buf[] = new byte[256];
  17.     DatagramPacket sPacket;
  18.     DatagramPacket rPacket;
  19.     DatagramSocket socket;
  20.     int count;
  21.     byte[] host = new byte[128];
  22.     try {
  23.       socket = new DatagramSocket();
  24.       // 输入目的方的主机名
  25.       System.out.print("请输入目的方的主机名: ");
  26.       count = System.in.read(host);
  27.       InetAddress addr = InetAddress.getByName(new String(host, 0, count - 2));
  28.       while (true) {
  29.         System.out.print("请输入要发送的数据: ");
  30.         count = System.in.read(buf);
  31.         // 发送数据报
  32.         sPacket = new DatagramPacket(buf, count - 2, addr, 8888);
  33.         socket.send(sPacket);
  34.         // 接收数据报
  35.         rPacket = new DatagramPacket(buf, buf.length);
  36.         socket.receive(rPacket);
  37.         System.out.print("返回信息: ");
  38.         String str = new String(rPacket.getData(), 0, rPacket.getLength());
  39.         System.out.println(str);
  40.       }
  41.     } catch (Exception e) {
  42.       System.out.println(e);
  43.     }
  44.   }
  45. }




TCP的实现部分 原文: http://www.java2000.net/p10506
接收代码
  1. package chat;
  2. import java.io.BufferedReader;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. /**
  9.  * TCP 接收数据的代码。
  10.  * 
  11.  * @author 赵学庆 www.java2000.net
  12.  */
  13. public class TCPReceiveTest {
  14.   void display() {
  15.     ServerSocket socket;
  16.     try {
  17.       socket = new ServerSocket(8888);
  18.       while (true) {
  19.         Socket s = socket.accept();
  20.         InputStream is = s.getInputStream();
  21.         BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  22.         PrintWriter out = new PrintWriter(s.getOutputStream());
  23.         String line = reader.readLine();
  24.         System.out.println("接收到来自 " + s.getRemoteSocketAddress() + " 数据:");
  25.         System.out.println(line);
  26.         out.print("OK");
  27.         out.flush();
  28.         out.close();
  29.         reader.close();
  30.         s.close();
  31.       }
  32.     } catch (Exception e) {
  33.       System.out.println(e);
  34.     }
  35.   }
  36.   public static void main(String[] args) {
  37.     TCPReceiveTest app = new TCPReceiveTest();
  38.     app.display();
  39.   }
  40. }

发送代码
  1. package chat;
  2. import java.io.BufferedReader;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.InetAddress;
  7. import java.net.Socket;
  8. /**
  9.  * TCP 发送数据的代码。
  10.  * 
  11.  * @author 赵学庆 www.java2000.net
  12.  */
  13. public class TCPSendTest {
  14.   public static void main(String[] args) {
  15.     TCPSendTest app = new TCPSendTest();
  16.     app.display();
  17.   }
  18.   void display() {
  19.     Socket s;
  20.     byte buf[] = new byte[256];
  21.     int count;
  22.     byte[] host = new byte[128];
  23.     try {
  24.       // 输入目的方的主机名
  25.       System.out.print("请输入目的方的主机名: ");
  26.       count = System.in.read(host);
  27.       InetAddress addr = InetAddress.getByName(new String(host, 0, count - 2));
  28.       while (true) {
  29.         System.out.print("请输入要发送的数据: ");
  30.         count = System.in.read(buf);
  31.         // 发送数据报
  32.         s = new Socket(addr.getHostAddress(), 8888);
  33.         InputStream is = s.getInputStream();
  34.         BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  35.         PrintWriter out = new PrintWriter(s.getOutputStream());
  36.         out.println(new String(buf, 0, count - 2));
  37.         out.flush();
  38.         String line = reader.readLine();
  39.         System.out.print("返回信息: ");
  40.         System.out.println(line);
  41.         reader.close();
  42.         out.close();
  43.         s.close();
  44.       }
  45.     } catch (Exception e) {
  46.       System.out.println(e);
  47.     }
  48.   }
  49. }


利用UDP实现双向聊天系统 Java笔记:《Java语言程序设计》–郭克华案例介绍  UDP是面向无连接的,但并不是没有客户端和服务端的区别。只是说,服务端运行之后,并不一定要等待客户端的连接才能通信,客户端可以直接和服务端通信,发送信息。   这里介绍一个聊天应用最基本的程序:客户端和服务器相同,都可以给对方发送信息,也能够自动接收对方发过来的信息。本程序效果如图所示。            “服务器端”和“客户端”对 阅读详情

相关推荐

TCP和UDP的异同点知识总结

想知道TCP和UDP的异同点吗?这篇文章将通过通俗易懂的方式带您理解这些。

nefss_的博客 4626

vue 前段 laravel8后端 封装websocket 实现实时聊天

然后使用 WebSocket 向所有连接的客户端广播该聊天信息。同时,在 Vue 前端监听订阅后,就能够接收 WebSocket 服务器发送的聊天信息,实现实时聊天的功能。这样,当你在 Vue 前端发送聊天信息时,该信息将会被转发给后端 Laravel 项目中的。

qq_27487739的博客 1410

16【TCP、UDP、网络通信】

16【TCP、UDP、网络通信】 一、基于网络编程 1.1 网络编程概述 计算机网络是通过传输介质(网线)、通信设施(路由器、交换机等)和网络通信协议,把分散在不同地点的计算机设备互连起来的,用来实现数据共享。 网络编程就是编写程序使互联网的多个设备(如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持。通过其提供的接口我们可以很方便地进行网络编程。 1.2 网络分层 通过网络发送数据是一项复杂的操作,通过网络将数据从一台主机发送到另外的主机,这个过程是通过计算机网络通信来完成。 网络通

緑水長流*z 2780

PHPLaravel框架中使用UDP协议的方法

综上所述,在Laravel框架中使用UDP协议可以使用fsockopen()函数或socket扩展来实现。在以上示例代码中,我们使用socket_create()函数创建UDP连接,并指定目标服务器的IP地址和端口号。在以上示例代码中,我们使用fsockopen()函数打开UDP连接,并指定目标服务器的IP地址和端口号。UDP协议是一种无连接、不可靠的协议,与TCP协议不同,它不保证数据包的顺序和可靠性。

我点评的博客 297

浅显易懂地看LLC变换器(三)

第3期 谐振与增益的定性关系 由简单的谐振电路说起 我们将以电感和电容的基本电路的特性逐渐了解谐振电路的特性 与电阻不同,电感和电容都不是纯阻性线性器件,电感的感抗XL和电容的容抗Xc都与频率有关,当加在电感和电容上的频率发生变化时,它们的感抗XL和容抗Xc会发生变化。 1) 如下图RL电路,当输入源Vin的频率增加时,电感的感抗增大,输出电压减小,增益Gain=Vo/Vin随频率增加而减小。 2) 如下图RC电路,相反,当输入源Vin的频率增加时...

iFTrue电力电子专栏 6745

Cisco思科 电子科技大学计算机网络 SRWE 期末技能考试 (PTSA)

电子科技大学2024春_SRWE_计算机网络系统 SRWE 期末技能考试 (PTSA)

2301_76745065的博客 5098

基于Socket的UDP和TCP编程介绍

作者:王珊珊,华清远见嵌入式学院讲师。一、概述TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种。UDP:用户数据报协议。UDP是一种无连接协议。UDP套接口是数据报套接口(da

华清远见 | 程序员的学习天堂 2111

Python爬取拼多多商品数据保姆级教程(附源码及效果图)

本文介绍了使用Python爬取拼多多商品数据的完整教程。通过DrissionPage库模拟浏览器操作,利用正则表达式提取嵌入在HTML中的商品数据(关键步骤是从window.rawData变量获取),解析后转换为结构化数据并导出Excel。教程包含八大步骤:环境配置、浏览器初始化、网络监听、搜索模拟、数据提取(核心是正则匹配JSON)、数据验证、字段解析和Excel导出,最后提供了封装好的函数可直接调用。该方法特别适合课程作业或毕业设计获取电商数据,能爬取商品名称、价格、销量等关键信息,处理了价格单位转换等

weixin_46449236的博客 2083

K8s部署PHP项目

K8s部署laravel项目

寻找09之夏的博客 3592

基于远程服务器 Tip_Adapter源码从零开始复现

从零一步步实现源代码的运行

zcyzcyjava的博客 1604

UVM实战 卷I学习笔记1——简单的UVM验证平台:只有driver

目录验证平台的组成最简单的验证平台——只有driverUVM如何搭建driver:加入factory机制加入objection机制加入virtual interface 个人《UVM实战卷I》学习随手笔记,此书作者:张强 验证平台的组成 一个验证平台要实现的基本功能: 模拟DUT的各种真实使用情况——给DUT施加各种激励→driver实现激励功能; 根据DUT的输出判断DUT行为是否与预期符合→scoreboard(也称为checker)——需注意判断的东西和判断的标准是什么; 收集DUT的输出并传递

weixin_41979380的博客 3891

MFC中基于TCP/UDP协议的网络聊天室(ODBC链接MySQL、基于对话框、简易网络聊天室、TCP/UDP协议)

MFC中基于TCP/UDP协议的网络聊天室(MySQL、基于对话框、简易网络对话框、TCP/UDP协议)

EQ_cyc的博客 3011

【SeedLab】Packet Sniffing and Spoofing Lab

本节实验要求:借助Scapy库,实现网络流量的捕获与伪造。

cold_windx的博客 4517

Linux网络编程-UDP实现QQ聊天功能

目录 一、什么是UDP 二、UDP单播 三、UDP实现QQ聊天功能 3.1 代码实现 3.2 编译 3.3 效果 四、总结 一、什么是UDP UDP协议详解可以查看博主其他博客,更有助于后面的开发实现。 Linux网络编程-UDP协议详解 二、UDP单播 本博客是使用UDP单播实现QQ聊天功能,更多有关UDP单播介绍和和实现,可以查看博主文章:Linux网络编程-UDP单播服务客户端代码实现; 三、UDP实现QQ聊天功能 3.1 代码实现 由...

ProYuan的博客 4409

YOLO11-Seg优化:注意力魔改 | 具有切片操作的SimAM注意力,魔改SimAM

问题点:SimAM计算整张特征图的像素差平均值时加权可能会忽略小目标的重要性,同时与整体平均值相比可能和背景信息相似,导致加权增强较弱;

会AI的学姐 460

Cadence PCB 仿真宝典【目录】

欢迎大家来到《Cadence PCB 仿真宝典》该专栏包括【入门篇】【提升篇】【技巧篇】【疑难篇】四个部分,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。

fydar的博客 3271

计算机网络 --- TCP 与 UDP

111

wwzzzzzzzzzzzzz的博客 8788

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux下基于UDP协议实现的聊天室项目(附源码)

好久没来更新了,这段时间一直在着手完成这个项目,由于之前没有接触过这种稍大型的项目,而且对于C/S架构以及UDP通信的了解也不是很深,所以前面很大的一段时间都被浪费掉了,做了很大无用功。 刚开始弄的时候,也是在网上搜了很多资料,找了很多版本,发现大都有一个问题,就是旁人看起来不易理解 ,代码注释行有限,导致看起来一头雾水。所以,本文将会花点篇幅来理清思路(本文使用的是UDP协议进行...

華仔的博客 8473

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

使用python实现 tcp/udp 多线程聊天器

套接字格式: socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为 0)来创建套接字。 socket 类型 socket.AF_UNIX 只能够用于单一的 Unix 系统进程间通信 socket.AF_INET 服务器之间网络通信 ipv4 socket.AF_INET6 IPv6 socket.SOCK_STREAM 流式 ...

qq_29176323的博客 1486

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【SOCKET编程】基于C++的TCP/UDP的聊天室

socket【插座;接口】:其实是模拟打电话的过程,IP地址就是电话号码,socket就是

写自己看而已 1万+

基于TCP,UDP的聊天室3.0版本(实现GUI界面,私聊,文件传输以及可实时变动的文件列表,用户列表)

哈喽观众老爷们,经过不懈的努力,在6月6日的早上,聊天室3.0版本终于诞生了!!!(下载地址在文章末尾) 看过我前两期的聊天室的看客们可能知道,前两期的内容涉及的东西仅只有TCP,并且智能在cmd命令下运行,但是这一次的项目已经是比较完善的聊天室了,实现了客户端:群聊,私聊,GUI界面(Swing编程),以及文件传输(UDP),可更新的在线用户列表和文件列表!服务...

hyc的博客 2213

基于TCP协议网络socket编程(java实现C/S通信)

本篇是详细记录在TCP通信原理之上,使用Java实现TCP的Socket网络通信,包含C/S软件架构的程序设计,偏向实践,更加有趣!TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。

陆海潘江的博客 1万+

C#实现聊天功能

要一对一、一对多的发送信息,实现聊天功能。需要用到C#网络编程的知识,需要用到System.Net、System.Net.Sockets和System.Net.Mail命名空间下的类。还需要知道网络编程的基本概念。 IP:每个电脑都有一个IP地址,在局域网内IP地址是可变的。 TCP协议(传输控制协议):是面向连接的传输层协议,应用程序在使用TCP之前,必须先建立TCP连接,在传输数据完毕后,必须释放已经建立的连接(跟打电话是否类似)。TCP可以保证从一端将数据传送至连接的另一端时,

小小张自由—>张有博 9422

Java实现基于UDP的一对一聊天

的过程中,通过创建的DatagramSocket的对象(socket)的receive方法接收(需要将receivePacket作为receive方法的参数),通过DatagramPacket返回的receivepacket.getOffset()和packet.getLength()确定数据在缓冲区的起止位置,再与receivePacket.getData()一起作为参数传入创建的String对象的方法中。的情况下,可以将接收和发送的代码块放入while(true){}中。...

qq_50587186的博客 563
上一篇: 并发事务中的数据锁的例子
下一篇: 高并发时让某段代码只运行一次的方法
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值