`
wgcode
  • 浏览: 601502 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AS3 Socket从零开始

 
阅读更多

大家如果想学AS3 Socket直接在百度里搜一下,会找到很多AS3与Java服务器的例子,很多朋友也许看得很糊涂,也有很多朋友看懂了,但想学更进一步的学习却又不好找教程了。这里我对网上常见的一个例子加点注释,并在原有的基础上加一些改动。

先附上网上找的AS3客户端代码:

package 
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.Socket;
import flash.utils.ByteArray; public class SocketExample extends Sprite
{ // The state constants to describe the protocol
public const DETERMINE_VERSION:int = 0;
public const RECEIVE_CHALLENGE:int = 1;
public const NORMAL:int = 2;
public const PORT:int = 5678; // Maps a state to a processing function
private var stateMap:Object; // Keeps track of the current protocol state
private var currentState:int; private var socket:Socket; public function SocketExample( )
{
// Initialzes the states map
stateMap = new Object( );
stateMap[DETERMINE_VERSION] = readVersion;
stateMap[RECEIVE_CHALLENGE] = readChallenge;
stateMap[NORMAL] = readNormalProtocol; // Initialze the current state
currentState = DETERMINE_VERSION; // Create and connect the socket
socket = new Socket( );
socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );
socket.addEventListener( Event.CONNECT, onConnect ); 
btnSend.label = "Send Data";
btnSend.emphasized = true;
btnSend.width = 150;
btnSend.move(20, 20);
//addChild(btnSend); btnSend.addEventListener(MouseEvent.CLICK, sendData);
} private function sendData( event:Event )
{ if (! socket.connected)
{
// Connect to the server 
socket.connect( "localhost", PORT );
} trace("send...");
socket.writeUTFBytes("example\n");
socket.flush(); } private function onConnect(event:Event):void
{
trace( "The socket is now connected..." ); } private function onSocketData( eventrogressEvent ):void
{
trace( "Socket received " + socket.bytesAvailable + " byte(s) of data:" );
//trace(socket.readMultiByte(socket.bytesAvailable, "UTF-8")); 

// Look up the processing function based on the current state
var processFunc:Function = stateMap[currentState];
processFunc( );
} private function readVersion( ):void
{
// Step 1 - read the version from the server
var version:int = socket.readInt(); // Once the version is read, the next state is receiving
// the challenge from the server
currentState = RECEIVE_CHALLENGE; // Step 2 - write the version back to the server
socket.writeInt( version );
socket.flush( );
} private function readChallenge( ):void
{
// Step 3 - read the 8 byte challenge into a byte array
var bytes:ByteArray = new ByteArray( );
socket.readBytes( bytes, 0, 8 ); // After the challenge is received, the next state is
// the normal protocol operation
currentState = NORMAL; // Step 4 - write the bytes back to the server
socket.writeBytes( bytes );
socket.flush( );
}

private function readMultiByte( ):void
{
socket.readMultiByte(socket.bytesAvailable, "UTF-8");
} private function readNormalProtocol( ):void
{
// Step 5 - process the normal socket messages here now that
// that handshaking process is complete
}
}
}


java 服务端代码

import java.io.*;
import java.net.*;
public class SocketSever {
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("end".equals(str))
break;
//}
client.close();
}
}
}


测试的时候flash得先从组件里拉一个Button组件到舞台上,并取个实例名btnSend,然后先运行java服务端,再启动客户端,点击按钮就会看到连接成功的输出。
上面的代码显得有点乱,如果看不懂没关系,我们把上面的代码精简一下。

首先是AS3,如果我们要用Socket,得先导入import flash.net.Socket;这个包。如果我们把这个类当文档类来使用的话,需要导入import flash.display.Sprite;这个包。最后我们得是否连接成功这个事件,还得导入import flash.events.*;这个包。


所以代码如下:

package 
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.Socket;
public class Main
{ public function Main()
{
// constructor code
}
}
}


http://www.shengshiyouxi.com

第二步,我们需要建立一个Socket并作初始化,然后连接到服务器。加上上面的代码如下:

package 
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.Socket;
public class Main extends Sprite
{
private var socket:Socket;
public function Main()
{
socket = new Socket();
socket.connect( "localhost", 5678);
}
}
}


对应的Java服务端代码:

import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);//建立一个Socket服务端。
server.accept();//等待客户端连接,如果没有客户端连接,
//程序会停在此行,而不会执行下一行。
System.out.println("客户端已连接!");//当有客户端连接上来的时候,
//打印输出客户端已连接。
}
}


以上代码可以说是最简单的Socket连接。


到这里,服务端代码暂时不管,先把给客户端的Socket加上事件,所以我们在连接到服务器前先加上以下两行代码:

socket.addEventListener(Event.CONNECT, onSocketConnect);//侦听Socket是否已连接上。

socket.addEventListener(Event.CLOSE, onSocketSeverClose);//侦听服务器是否已关闭。

然后写上事件的处理函数。

完整代码如下:

package 
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.Socket;
public class Main extends Sprite
{
private var socket:Socket;
public function Main()
{
socket = new Socket();//新建一个Socket

socket.addEventListener(Event.CONNECT, onSocketConnect);//侦听Socket是否已连接上。
socket.addEventListener(Event.CLOSE, onSocketSeverClose);//侦听服务器是否已关闭。

socket.connect( "localhost", 5678);//连接到服务器
}

private function onSocketConnect(e:Event):void
{
trace("已连接上服务器!");
}

private function onSocketSeverClose(e:Event):void
{
trace("服务器已关闭!");
}
}
}


启动服务端再测试下。发现我们刚连上服务器,服务器就关闭了。所以我们把服务端代码也改一下。

import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);//建立一个Socket服务端。
while(true)
{
server.accept();//等待客户端连接,如果没有客户端连接,程序会停在此行,而不会执行下一行。
System.out.println("客户端已连接!");//当有客户端连接上来的时候,打印输出客户端已连接。
}
}
}


这里我只是在等待客户端连接的地方加了个死循环,这们服务端不会在有客户端连上来后自动关闭了,它会一直等等服务端的连接。大家可以再测试一下。

接下来,我们在连接服务器后,向服务器发送一个字符串。发送字符串会用到Socket的write方法和flush方法。write方法只是将要发送的信息存储起来,但没真正发送出去。而flush方法是将要发送的信息发送到数据流里。完整代码如下:

package 
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.Socket;
public class Main extends Sprite
{
private var socket:Socket;
public function Main()
{
socket = new Socket();//新建一个Socket

socket.addEventListener(Event.CONNECT, onSocketConnect);//侦听Socket是否已连接上。
socket.addEventListener(Event.CLOSE, onSocketSeverClose);//侦听服务器是否已关闭。

socket.connect( "localhost", 5678);//连接到服务器
}

private function onSocketConnect(e:Event):void
{
trace("已连接上服务器!");

//新加代码
socket.writeUTFBytes("abc\n");
socket.flush();
//新加代码

}

private function onSocketSeverClose(e:Event):void
{
trace("服务器已关闭!");
}
}
}


注意:发送的字符串必须加上\n不然服务端不能识别已输入已结束,当然,这只是针对于下面我们下面写的服务端代码而言。
对应的服务端代码如下:

import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);//建立一个Socket服务端。
while(true)
{

Socket client=server.accept();//等待客户端连接,如果没有客户端连接,程序会停在此行,而不会执行下一行。
System.out.println("客户端已连接!");//当有客户端连接上来的时候,打印输出客户端已连接。
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
String str=in.readLine();
System.out.println(str);
}
}
}


接下来,服务端收到客户端发送的消息后也回一个字符串。有发就要有收,客户端也得同步写接收的语句。在此之前,先给客户端添加一个收到信息的事件侦听。

socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );//侦听服务端是否有消息发送过来。

然后写上事件处理函数

private function onSocketData(e:Event):void

{

var str:String = socket.readMultiByte(socket.bytesAvailable, "UTF-8");

trace(str);

}

完整代码如下:

package 
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.Socket;
public class Main extends Sprite
{
private var socket:Socket;
public function Main()
{
socket = new Socket();//新建一个Socket

socket.addEventListener(Event.CONNECT, onSocketConnect);//侦听Socket是否已连接上。
socket.addEventListener(Event.CLOSE, onSocketSeverClose);//侦听服务器是否已关闭。
socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );//侦听服务端是否有消息发送过来。

socket.connect( "localhost", 5678);//连接到服务器
}

private function onSocketConnect(e:Event):void
{
trace("已连接上服务器!");
socket.writeUTFBytes("abc\n");
socket.flush();
}

private function onSocketData(e:Event):void
{
var str:String = socket.readMultiByte(socket.bytesAvailable, "UTF-8");
trace(str);
}

private function onSocketSeverClose(e:Event):void
{
trace("服务器已关闭!");
}
}
}


对应的服务端代码如下:

import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);//建立一个Socket服务端。
while(true)
{

Socket client=server.accept();//等待客户端连接,如果没有客户端连接,程序会停在此行,而不会执行下一行。
System.out.println("客户端已连接!");//当有客户端连接上来的时候,打印输出客户端已连接。
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
String str=in.readLine();
System.out.println(str);
PrintWriter out=new PrintWriter(client.getOutputStream());
out.println("cba");
out.flush();
}
}
}


小结:到这里算是写了一个简单的Socket连接,并实现了收发功能,如果从来没接触过Socket的朋友可以从上面的实例中学习Socket,通过上面的小实例可以看出,客户端和服务端必须保持一致,很多朋友学Socket的的难处就是不会写服务端程序,所以写出来的程序没法测试。而去下别人写好的服务端程序又没看懂,不知道如何写对应的客户端,所以就停步不学了。这里我建议有以上问题的朋友了解一下Java语言,学会自己学对应的服务端语言,Java语言和AS3差别不大,写服务端也很简单。相对来说要容易一些。

分享到:
评论

相关推荐

    毕设单片机实战项目基于esp8266的高考倒计时.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    毕设工坊:专注于计算机毕业设计项目的交流与资源共享平台,涵盖各类技术文档、代码示例及实战经验分享,助力学子顺利完成学业挑战

    毕设工坊:专注于计算机毕业设计项目的交流与资源共享平台,涵盖各类技术文档、代码示例及实战经验分享,助力学子顺利完成学业挑战。

    【window 可视化nvm管理node版本 nvm-desktop】

    【window 可视化nvm管理node版本 nvm-desktop】

    《基于YOLOv8的玉器识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    (源码)基于microbit编程语言的mymicrobit扩展插件项目.zip

    # 基于microbit编程语言的mymicrobit扩展插件项目 ## 项目简介 这是一个基于microbit编程语言的mymicrobit扩展插件项目。该项目旨在提供额外的功能和特性,以扩展microbit编程环境。通过此插件,用户可以轻松地在MakeCode环境中进行编程,实现对micro:bit设备的更多控制和功能实现。 ## 项目的主要特性和功能 1. 扩展性提供了丰富的积木块和代码库,允许用户轻松实现复杂的编程逻辑和功能扩展。 2. 图形化编程支持通过积木块形式的图形化编程,降低编程门槛,方便初学者快速上手。 3. 实时预览提供了积木块的实时预览功能,方便用户直观地了解代码块的逻辑和功能。 4. 与MakeCode无缝集成可以直接在MakeCode环境中导入和使用,无需额外的配置和安装。 ## 安装使用步骤

    毕设单片机实战项目基于ESP8266的局域网图片刷新显示系统.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    《基于YOLOv8的印章分析系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    p111基于django的企业员工管理系统.zip

    项目资源包含:可运行源码+sql文件 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 项目具有较高的学习借鉴价值,也可拿来修改、二次开发。 有任何使用上的问题,欢迎随时与博主沟通,博主看到后会第一时间及时解答。 开发语言:Python 框架:django Python版本:python3.8 数据库:mysql 5.7 数据库工具:Navicat 开发软件:PyCharm 浏览器:谷歌浏览器

    第三章-局域网-思维导图

    第三章-局域网-思维导图

    机械工程PT300机械故障仿真测试台:高校教学与科研用精密振动分析及故障诊断实验系统了您提供的规范

    内容概要:PT300机械故障综合模拟实验台由瓦仑尼安教学设备有限公司生产,旨在帮助用户深入了解振动特征知识及复杂转子振动频谱分析,实现精密振动分析和精准故障诊断。该实验台能模拟轴承故障、不平衡、不对中、设备松动、转子摩擦等多种机械故障现象,可进行不同转速下的轴承故障频率识别、转子静动平衡模拟试验、设备启停机测试等实验。设备采用高效节能ABB三相交流电动机,配备高精度转速控制和测量模块,确保运行稳定。此外,实验台还设有透明防震安全罩和互锁开关,保障实验安全。; 适合人群:高校师生、科研人员等需要学习或研究机械故障诊断相关理论知识和实践技能的人群。; 使用场景及目标:①用于高校等教育机构的教学,辅助学生理解机械故障诊断的理论知识和实践技能;②满足科研人员进行机械故障诊断算法验证、故障特征分析等科研需求。; 其他说明:PT300机械故障综合模拟实验台的每个部件均经过高精度加工,确保在不同振动状态下稳定运行。用户可根据期望分析特定部件的故障特征。设备尺寸为735mm(长)×310mm(宽)×350mm(高),保修一年,且提供免费操作指导服务。

    Android毕设实战项目基于Android+Django+sqlit3开发.zip

    【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    【光子晶体模拟】基于COMSOL弱形式PDE的三维光子晶体能带结构计算与优化:电磁场切向连续性处理及带隙分析系统设计使用COMSOL

    内容概要:本文详细介绍了使用COMSOL Multiphysics的弱形式接口对三维光子晶体进行数值模拟的方法和技巧。文章通过具体的代码示例,解释了如何构建光子晶体的介电常数分布、设置弱形式PDE、处理电磁场切向连续性、应用Floquet周期边界条件以及特征值求解等关键步骤。特别强调了弱形式接口相比传统物理场接口的优势,如灵活性和对复杂边界的处理能力。文中还分享了一些实用的经验和注意事项,如布洛赫边界条件的实现、特征值求解器参数的优化配置以及网格划分的技巧。 适合人群:具备一定电磁学和数值模拟基础的研究人员或工程师,尤其是对光子晶体仿真感兴趣的读者。 使用场景及目标:①理解并掌握COMSOL弱形式接口在光子晶体仿真中的应用;②学习如何通过弱形式设置处理复杂的电磁场问题;③提高对光子晶体能带结构和带隙特性的认识;④掌握特征值求解和网格划分的最佳实践。 阅读建议:由于本文涉及较多的具体代码和物理概念,建议读者在阅读过程中结合COMSOL软件进行实际操作,同时查阅相关电磁理论书籍以加深理解。此外,对于文中提到的一些具体参数设置和技巧,可以通过尝试不同的配置来巩固所学知识。

    (源码)基于Arduino平台的INSPTComputacion2项目.zip

    # 基于Arduino平台的INSPTComputacion2项目 ## 项目简介 INSPTComputacion2是一个基于Arduino平台的开发项目。该项目旨在通过Arduino的硬件和软件能力,实现一系列计算和交互功能。通过此项目,用户可以体验到Arduino在嵌入式系统、物联网和微控制器等领域的强大功能。 ## 项目的主要特性和功能 该项目的主要特性和功能包括但不限于以下几点 1. 嵌入式系统开发利用Arduino的硬件资源,开发嵌入式系统应用。 2. 物联网应用实现Arduino与物联网技术的结合,进行数据采集、传输和控制。 3. 交互设计通过Arduino实现人机交互,如按钮控制、LED显示等。 4. 数据处理利用Arduino进行数据处理和分析,如温度、湿度等环境数据的采集和处理。 ## 安装使用步骤 以下是在已下载本项目源码文件后的安装使用步骤 1. 确保已安装Arduino IDE软件。

    毕业设计物联网实战项目基于云且连接 Internet 的新式应用程序。 可用于建立Web应用、 IoT物联网、移动后端等。.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    毕业设计物联网实战项目基于touchgfx,调度基于freertos.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    Python数据结构-学习笔记

    Python数据结构-学习笔记

    电影在线购票系统(springboot+ssm+vue+mysql)含万字系统详细说明文档

    该系统展示了一个电影在线购票系统的结构图,系统分为前台和后台两部分。前台包括首页、影院信息、电影信息、电影资讯和个人中心等模块,主要面向普通用户,提供电影浏览、选座购票、个人账户管理等功能。后台部分由管理员通过后台模块进行操作,包括系统首页、用户管理、场次管理、时间段管理、影院信息管理、电影分类管理、电影信息管理、订单管理和个人中心等模块,用于系统的维护和管理,如用户信息维护、电影和影院信息更新、订单处理等。整个系统旨在为用户提供便捷的在线购票体验,同时确保后台管理的高效和有序。

    5G NR射频基本指标一致性自测用例

    5G NR射频一致性自测用例 由于NR射频测试场景太多,全指标自动化跑测用时太久,本表格选取了主要场景的关键指标,以便于射频工程师对产品的NR射频指标进行初步摸底。 表格每一页概况: 1、NR TDD摸底指标N77/78/79/41 2、NR FDD摸底指标N1/3//5/8/28 附录1、各频段带宽所支持的SCS 附录2、各带宽SCS的RB配置 附录3、灵敏度测试的RB配置 附录4、摸底测试信道查询 附录5、各频段频率范围

    毕业设计物联网实战项目基于STM32、ESP8266、EMQX和Android的智能家居系统.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    python开发的邮件群发工具.zip

    软件介绍: 一个永久免费且无广告的邮件群发软件,直接使用SMTP来群发邮件支持添加多个发信邮箱,一个小而美的邮件群发软件。 开发这个软件最初是打算用QQ获取某个群所有的群成员QQ,然后转换为QQ邮箱群发偷人的,结果现在发现QQ已经限制到只能是该群管理员、群主才可以获取群成员所有QQ了,所以获取群成员所有QQ邮箱的功能就没有上线了。 支持导入TXT文件一行一个邮箱、粘贴邮箱、查看邮箱列表、SMTP发信邮箱(支持多个)、管理SMTP邮箱、单个发信邮箱限制发送次数

Global site tag (gtag.js) - Google Analytics