飞信Fetion 开发资料及下载
使用飞信SDK开发短信收发程序
http://hi.baidu.com/rarnu/blog/item/c365237f63b5db0e29388a31.html
Visual Basic 2005 飞信SDK开发短信收发程序
欢迎转载,本文转自[田草博客www.tiancao.net] 原文链接:http://www.tiancao.net/blogview.asp?logID=646
http://www.tiancao.net/blogview.asp?logID=646
我的第一个SDK作品:过年有空用SDK写了一个M8用的飞信,不过还不太好用,欢迎测试
http://bbs.meizu.com/thread-783641-1-1.html
.NET - C# - Delphi - 使用飞信SDK(FetionSDK)开发短信收发程序(飞信客户端开发)
http://sites.google.com/site/iworknotes/net/net-c-delphi-shiyongfeixinsdkfetionsdkkaifaduanxinshoufachengxufeixinkehuduankaifa
利用飞信的协议可以在线收发消息,或是向手机发送消息。由此,可以自己来完成一个IM工具。
本文即是对飞信SDK的使用方法,及如何开发作一个说明。
一、引用FetionSDK
飞信是采用C#开发的,所有的程序集均是.NET,因此我们也需要使用Delphi.NET/Chrome来进行相关的开发。在Chrome中,新建一个工程,并引入FetionSDK.dll,当然您也可以使用Delphi2007 for .NET,开发出来结果一样。
其实我曾尝试过把FetionSDK.dll变成一个COM+程序,但是不巧的是这个dll没有strong name,无法转换。
引用完SDK后,在主窗体的uses下添加NullStudio.Fetion_SDK。
二、准备工作
准备工作很简单,在public区分符下,建立一个名为sdk的FetionSDK对象。然后为它创建一个实例。
三、用户登录
使用以下代码来填入用户名和密码:
sdk.AccountManager.FillUserIdAndPassword(UserID,Password,true);
三个参数分别是用户手机号,密码,是否自动登录,当选定了自动登录为True时,可以使用
sdk.AccountManager.LoginOrLogout();
来自动的判断是登录或是注销,否则的话,就要使用
sdk.AccountManager.Login(); 来登录。
四、状态改变
用户登录或注销,或是改变自己当前的状态时,会触发状态改变的事件。如下:
procedure sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);
其中参数e中来自命名空间Imps.Client.Core。
然后我们绑定这个事件:
sdk.SDK_UserSatusChange += new FetionSDK.SDK_UserSatusChangedEventHandler(sdk_SDK_UserSatusChange);
这样SDK就能接收到状态改变的事件了。另外,还能针对各个状态,执行不同的指令,如下:
case e.NewStatus of
Imps.Client.UserAccountStatus.Disconnected: ;
Imps.Client.UserAccountStatus.Initialized: ;
Imps.Client.UserAccountStatus.Loginning: ;
Imps.Client.UserAccountStatus.Logon:
Imps.Client.UserAccountStatus.Logoff: ;
Imps.Client.UserAccountStatus.Logouting: ;
Imps.Client.UserAccountStatus.None: ;
Imps.Client.UserAccountStatus.OfflineLogon: ;
Imps.Client.UserAccountStatus.StandBy: ;
Imps.Client.UserAccountStatus.WaitReconnect: ;
else
end;
五、获取好友列表
var
lst : List<Contact>;
i: Integer;
begin
lstFriendLst.Items.Clear();
lst := sdk.ContactControl.getAllContactList();
for i := 0 to lst.Count - 1 do
begin
lstFriendLst.Items.Add(
string.Format("{0} [Fetion: {1} Mobile: {2}]",
lst[i].DisplayName, lst[i].Uri.Id,
IfThen(lst[i].PersonalInfo.MobileNo = string.Empty, "Not Published", lst[i].PersonalInfo.MobileNo)));
end;
六、发送消息
调用SDK的发送消息指令,传入的参数分别是对方手机号码和短信的内容。
sdk.ContactControl.SendIM.SendIM(edtPhoneNo.Text, edtSendMsg.Text);
七、接收消息
接收到消息时,会解发SDK的收到消息事件,如下:
procedure sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);
实现此方法后,绑定这个事件。
sdk.SDK_ReceiveMessage += new FetionSDK.SDK_ReceiveMessageEventHandler(sdk_SDK_ReceiveMessage);
八、发送手机短信
与发送消息一样,只不过使用的是另一个方法。
sdk.ContactControl.SendSMS.SendSMS(sdk.ContactControl.getMyself.Uri.Id,edtSendMsg.Text);
在这里需要注意SendIM与SendSMS的区别。
getMyself是SDK中的一个方法,用来获取当前用户的信息。
九、出错事件
当SDK因为某种原因出错后,会触发出错事件,如下:
procedure sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);
实现后绑定:
sdk.SDK_Error += new FetionSDK.SDK_ErrorEventHandler(sdk_SDK_Error);
十、编译,执行程序
现在可以编译并执行程序了。
namespace FetionDemo;
interface
uses
System.Windows.Forms,
System.Drawing,
Imps.Client.Core,
NullStudio.Fetion_SDK,
NullStudio.Fetion_SDK.Event,
System.Collections.Generic;
type
/// <summary>
/// Summary description for MainForm.
/// </summary>
MainForm = class(System.Windows.Forms.Form)
{$REGION Windows Form Designer generated fields}
private
btnSendSelf: System.Windows.Forms.Button;
edtPhoneNo: System.Windows.Forms.TextBox;
btnSend: System.Windows.Forms.Button;
edtSendMsg: System.Windows.Forms.TextBox;
sbMain: System.Windows.Forms.StatusStrip;
lblPassword: System.Windows.Forms.Label;
lblAccount: System.Windows.Forms.Label;
edtMsg: System.Windows.Forms.TextBox;
lblPhoneNo: System.Windows.Forms.Label;
gbMsg: System.Windows.Forms.GroupBox;
lstFriendLst: System.Windows.Forms.ListBox;
gbFriendLst: System.Windows.Forms.GroupBox;
edtPassword: System.Windows.Forms.TextBox;
edtUserID: System.Windows.Forms.TextBox;
lblError: System.Windows.Forms.ToolStripStatusLabel;
btnLogoff: System.Windows.Forms.Button;
btnLogin: System.Windows.Forms.Button;
lblStatus: System.Windows.Forms.ToolStripStatusLabel;
gbLogin: System.Windows.Forms.GroupBox;
components: System.ComponentModel.Container := nil;
method InitializeComponent;
{$ENDREGION}
private
method btnSendSelf_Click(sender: System.Object; e: System.EventArgs);
method btnSend_Click(sender: System.Object; e: System.EventArgs);
method btnLogoff_Click(sender: System.Object; e: System.EventArgs);
method btnLogin_Click(sender: System.Object; e: System.EventArgs);
method MainForm_Load(sender: System.Object; e: System.EventArgs);
protected
method Dispose(aDisposing: boolean); override;
function IfThen(ABool: Boolean; AStr1, AStr2: String): String;
public
sdk : FetionSDK;
bLogon: Boolean;
procedure sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);
procedure sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);
procedure sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);
constructor;
end;
implementation
{$REGION Construction and Disposition}
constructor MainForm;
begin
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
end;
method MainForm.Dispose(aDisposing: boolean);
begin
if aDisposing then begin
if assigned(components) then
components.Dispose();
//
// TODO: Add custom disposition code here
//
end;
inherited Dispose(aDisposing);
end;
{$ENDREGION}
{$REGION Windows Form Designer generated code}
method MainForm.InitializeComponent;
begin
var resources: System.ComponentModel.ComponentResourceManager := new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
self.sbMain := new System.Windows.Forms.StatusStrip();
self.lblStatus := new System.Windows.Forms.ToolStripStatusLabel();
self.lblError := new System.Windows.Forms.ToolStripStatusLabel();
self.gbMsg := new System.Windows.Forms.GroupBox();
self.lblPhoneNo := new System.Windows.Forms.Label();
self.edtSendMsg := new System.Windows.Forms.TextBox();
self.btnSend := new System.Windows.Forms.Button();
self.edtPhoneNo := new System.Windows.Forms.TextBox();
self.edtMsg := new System.Windows.Forms.TextBox();
self.btnLogin := new System.Windows.Forms.Button();
self.edtUserID := new System.Windows.Forms.TextBox();
self.edtPassword := new System.Windows.Forms.TextBox();
self.lblAccount := new System.Windows.Forms.Label();
self.lblPassword := new System.Windows.Forms.Label();
self.gbLogin := new System.Windows.Forms.GroupBox();
self.btnLogoff := new System.Windows.Forms.Button();
self.gbFriendLst := new System.Windows.Forms.GroupBox();
self.lstFriendLst := new System.Windows.Forms.ListBox();
self.btnSendSelf := new System.Windows.Forms.Button();
self.sbMain.SuspendLayout();
self.gbMsg.SuspendLayout();
self.gbLogin.SuspendLayout();
self.gbFriendLst.SuspendLayout();
self.SuspendLayout();
//
// sbMain
//
self.sbMain.Items.AddRange(array of System.Windows.Forms.ToolStripItem([self.lblStatus,
self.lblError]));
self.sbMain.Location := new System.Drawing.Point(0, 466);
self.sbMain.Name := 'sbMain';
self.sbMain.Size := new System.Drawing.Size(358, 22);
self.sbMain.TabIndex := 9;
self.sbMain.Text := 'statusStrip1';
//
// lblStatus
//
self.lblStatus.Name := 'lblStatus';
self.lblStatus.Size := new System.Drawing.Size(41, 17);
self.lblStatus.Text := 'Logoff';
//
// lblError
//
self.lblError.Name := 'lblError';
self.lblError.Size := new System.Drawing.Size(53, 17);
self.lblError.Text := 'No Error';
//
// gbMsg
//
self.gbMsg.Controls.Add(self.lblPhoneNo);
self.gbMsg.Controls.Add(self.edtSendMsg);
self.gbMsg.Controls.Add(self.btnSend);
self.gbMsg.Controls.Add(self.edtPhoneNo);
self.gbMsg.Controls.Add(self.edtMsg);
self.gbMsg.Location := new System.Drawing.Point(12, 198);
self.gbMsg.Name := 'gbMsg';
self.gbMsg.Size := new System.Drawing.Size(337, 231);
self.gbMsg.TabIndex := 8;
self.gbMsg.TabStop := false;
self.gbMsg.Text := 'Message';
//
// lblPhoneNo
//
self.lblPhoneNo.AutoSize := true;
self.lblPhoneNo.Location := new System.Drawing.Point(11, 174);
self.lblPhoneNo.Name := 'lblPhoneNo';
self.lblPhoneNo.Size := new System.Drawing.Size(53, 12);
self.lblPhoneNo.TabIndex := 6;
self.lblPhoneNo.Text := 'Phone No';
//
// edtSendMsg
//
self.edtSendMsg.Location := new System.Drawing.Point(7, 198);
self.edtSendMsg.Name := 'edtSendMsg';
self.edtSendMsg.Size := new System.Drawing.Size(249, 21);
self.edtSendMsg.TabIndex := 5;
//
// btnSend
//
self.btnSend.Location := new System.Drawing.Point(262, 196);
self.btnSend.Name := 'btnSend';
self.btnSend.Size := new System.Drawing.Size(69, 23);
self.btnSend.TabIndex := 4;
self.btnSend.Text := 'Send';
self.btnSend.UseVisualStyleBackColor := true;
self.btnSend.Click += new System.EventHandler(@self.btnSend_Click);
//
// edtPhoneNo
//
self.edtPhoneNo.Location := new System.Drawing.Point(68, 171);
self.edtPhoneNo.Name := 'edtPhoneNo';
self.edtPhoneNo.Size := new System.Drawing.Size(145, 21);
self.edtPhoneNo.TabIndex := 3;
//
// edtMsg
//
self.edtMsg.Location := new System.Drawing.Point(5, 20);
self.edtMsg.Multiline := true;
self.edtMsg.Name := 'edtMsg';
self.edtMsg.ReadOnly := true;
self.edtMsg.ScrollBars := System.Windows.Forms.ScrollBars.Vertical;
self.edtMsg.Size := new System.Drawing.Size(326, 145);
self.edtMsg.TabIndex := 1;
//
// btnLogin
//
self.btnLogin.Location := new System.Drawing.Point(274, 12);
self.btnLogin.Name := 'btnLogin';
self.btnLogin.Size := new System.Drawing.Size(75, 23);
self.btnLogin.TabIndex := 6;
self.btnLogin.Text := 'Login';
self.btnLogin.UseVisualStyleBackColor := true;
self.btnLogin.Click += new System.EventHandler(@self.btnLogin_Click);
//
// edtUserID
//
self.edtUserID.Location := new System.Drawing.Point(69, 17);
self.edtUserID.Name := 'edtUserID';
self.edtUserID.Size := new System.Drawing.Size(180, 21);
self.edtUserID.TabIndex := 3;
//
// edtPassword
//
self.edtPassword.Location := new System.Drawing.Point(69, 44);
self.edtPassword.Name := 'edtPassword';
self.edtPassword.PasswordChar := '*';
self.edtPassword.Size := new System.Drawing.Size(180, 21);
self.edtPassword.TabIndex := 4;
//
// lblAccount
//
self.lblAccount.AutoSize := true;
self.lblAccount.Location := new System.Drawing.Point(6, 20);
self.lblAccount.Name := 'lblAccount';
self.lblAccount.Size := new System.Drawing.Size(47, 12);
self.lblAccount.TabIndex := 1;
self.lblAccount.Text := 'Accoumt';
//
// lblPassword
//
self.lblPassword.AutoSize := true;
self.lblPassword.Location := new System.Drawing.Point(6, 47);
self.lblPassword.Name := 'lblPassword';
self.lblPassword.Size := new System.Drawing.Size(53, 12);
self.lblPassword.TabIndex := 2;
self.lblPassword.Text := 'Password';
//
// gbLogin
//
self.gbLogin.Controls.Add(self.edtPassword);
self.gbLogin.Controls.Add(self.edtUserID);
self.gbLogin.Controls.Add(self.lblAccount);
self.gbLogin.Controls.Add(self.lblPassword);
self.gbLogin.Location := new System.Drawing.Point(11, 6);
self.gbLogin.Name := 'gbLogin';
self.gbLogin.Size := new System.Drawing.Size(255, 80);
self.gbLogin.TabIndex := 7;
self.gbLogin.TabStop := false;
self.gbLogin.Text := 'Login';
//
// btnLogoff
//
self.btnLogoff.Location := new System.Drawing.Point(274, 41);
self.btnLogoff.Name := 'btnLogoff';
self.btnLogoff.Size := new System.Drawing.Size(75, 23);
self.btnLogoff.TabIndex := 10;
self.btnLogoff.Text := 'Logoff';
self.btnLogoff.UseVisualStyleBackColor := true;
self.btnLogoff.Click += new System.EventHandler(@self.btnLogoff_Click);
//
// gbFriendLst
//
self.gbFriendLst.Controls.Add(self.lstFriendLst);
self.gbFriendLst.Location := new System.Drawing.Point(11, 92);
self.gbFriendLst.Name := 'gbFriendLst';
self.gbFriendLst.Size := new System.Drawing.Size(338, 100);
self.gbFriendLst.TabIndex := 11;
self.gbFriendLst.TabStop := false;
self.gbFriendLst.Text := 'Friend List';
//
// lstFriendLst
//
self.lstFriendLst.FormattingEnabled := true;
self.lstFriendLst.ItemHeight := 12;
self.lstFriendLst.Location := new System.Drawing.Point(8, 18);
self.lstFriendLst.Name := 'lstFriendLst';
self.lstFriendLst.Size := new System.Drawing.Size(324, 76);
self.lstFriendLst.TabIndex := 0;
//
// btnSendSelf
//
self.btnSendSelf.Location := new System.Drawing.Point(243, 435);
self.btnSendSelf.Name := 'btnSendSelf';
self.btnSendSelf.Size := new System.Drawing.Size(106, 23);
self.btnSendSelf.TabIndex := 12;
self.btnSendSelf.Text := 'Send To Self';
self.btnSendSelf.UseVisualStyleBackColor := true;
self.btnSendSelf.Click += new System.EventHandler(@self.btnSendSelf_Click);
//
// MainForm
//
self.ClientSize := new System.Drawing.Size(358, 488);
self.Controls.Add(self.btnSendSelf);
self.Controls.Add(self.gbFriendLst);
self.Controls.Add(self.btnLogoff);
self.Controls.Add(self.sbMain);
self.Controls.Add(self.gbMsg);
self.Controls.Add(self.btnLogin);
self.Controls.Add(self.gbLogin);
self.Icon := (resources.GetObject('$this.Icon') as System.Drawing.Icon);
self.Name := 'MainForm';
self.Text := 'Fetion';
self.Load += new System.EventHandler(@self.MainForm_Load);
self.sbMain.ResumeLayout(false);
self.sbMain.PerformLayout();
self.gbMsg.ResumeLayout(false);
self.gbMsg.PerformLayout();
self.gbLogin.ResumeLayout(false);
self.gbLogin.PerformLayout();
self.gbFriendLst.ResumeLayout(false);
self.ResumeLayout(false);
self.PerformLayout();
end;
{$ENDREGION}
method MainForm.MainForm_Load(sender: System.Object; e: System.EventArgs);
begin
sdk := new FetionSDK;
bLogon := false;
sdk.SDK_UserSatusChange += new FetionSDK.SDK_UserSatusChangedEventHandler(sdk_SDK_UserSatusChange);
sdk.SDK_ReceiveMessage += new FetionSDK.SDK_ReceiveMessageEventHandler(sdk_SDK_ReceiveMessage);
sdk.SDK_Error += new FetionSDK.SDK_ErrorEventHandler(sdk_SDK_Error);
end;
procedure MainForm.sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);
var
currStat: string;
i: Integer;
lst : List<Contact>;
begin
currStat := e.NewStatus.ToString();
lblStatus.Text := currStat;
case e.NewStatus of
Imps.Client.UserAccountStatus.Logon:
begin
bLogon := true;
lstFriendLst.Items.Clear();
lst := sdk.ContactControl.getAllContactList();
for i := 0 to lst.Count - 1 do
begin
lstFriendLst.Items.Add(
string.Format("{0} [Fetion: {1} Mobile: {2}]",
lst[i].DisplayName, lst[i].Uri.Id,
IfThen(lst[i].PersonalInfo.MobileNo = string.Empty, "Not Published", lst[i].PersonalInfo.MobileNo)));
end;
end;
else
begin
bLogon := false;
lstFriendLst.Items.Clear();
end;
{
Imps.Client.UserAccountStatus.Disconnected: ;
Imps.Client.UserAccountStatus.Initialized: ;
Imps.Client.UserAccountStatus.Loginning: ;
Imps.Client.UserAccountStatus.Logoff: ;
Imps.Client.UserAccountStatus.Logouting: ;
Imps.Client.UserAccountStatus.None: ;
Imps.Client.UserAccountStatus.OfflineLogon: ;
Imps.Client.UserAccountStatus.StandBy: ;
Imps.Client.UserAccountStatus.WaitReconnect: ;
}
end;
end;
method MainForm.btnLogin_Click(sender: System.Object; e: System.EventArgs);
begin
if not bLogon then
begin
sdk.AccountManager.FillUserIdAndPassword(edtUserID.Text,edtPassword.Text,false);
sdk.AccountManager.LoginOrLogout();
end;
end;
procedure MainForm.sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);
begin
lblError.Text := e.Message.Message;
end;
method MainForm.btnLogoff_Click(sender: System.Object; e: System.EventArgs);
begin
if bLogon then
sdk.AccountManager.LoginOrLogout();
end;
function MainForm.IfThen(ABool: Boolean; AStr1, AStr2: String): String;
begin
if ABool then
result := AStr1
else
result := AStr2;
end;
method MainForm.btnSend_Click(sender: System.Object; e: System.EventArgs);
begin
sdk.ContactControl.SendIM.SendIM(edtPhoneNo.Text, edtSendMsg.Text);
edtMsg.Text := edtMsg.Text + 'Self: ' + edtSendMsg.Text + '\r\n';
end;
procedure MainForm.sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);
begin
edtMsg.Text := edtMsg.Text + e.Contact.DisplayName + ': '+e.Message;
end;
method MainForm.btnSendSelf_Click(sender: System.Object; e: System.EventArgs);
begin
sdk.ContactControl.SendSMS.SendSMS(sdk.ContactControl.getMyself.Uri.Id,edtSendMsg.Text);
end;
end.
附件 (2)
- FetionSDK.rar 1057k - 创建时间 2009-3-8 上午6:39,创建人 石东亮 (版本 3 / 早期版本)
- MyFetion.rar 988k - 创建时间 2009-3-8 上午6:37,创建人 石东亮 (版本 3 / 早期版本)
转载于:https://www.cnblogs.com/xiexiaokui/archive/2009/04/05/1430020.html
飞信Fetion 开发资料及下载相关推荐
- 最新MTK芯片型号汇总,MTK开发资料大全下载
前面总结的MTK芯片资料有点混乱,不好查看,现在重新整理一份全面的MTK芯片,MTK开发设计资料,方便大家学习,下载. MTK芯片分类: MTK芯片型号大全:http://bbs.16rd.com/c ...
- GD32开发资料汇总下载软件硬件工具
GD32的芯片替代STM32目前已是大势所趋,进口料已经买不到货,周期也拉到了半年以上,价格也是很夸张. 如果你打算换芯片,又着急找资料,这里汇总了所有系列的GD32资料: 直接上图,总有一款适合你. ...
- MT6739芯片处理器,MT6739套片开发资料汇集下载
MT6739处理器: MT6739处理器具有集成的蓝牙.FM.WLAN和GPS模块,是一个高度集成的基带平台,包括调制解调器和应用处理子系统,以实现LTE智能手机应用.该芯片集成了高达1.28 GHz ...
- 【Visual C++】游戏开发笔记三十一 回归季:游戏开发资料整理打包下载专栏行文思路整理
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/8147229 作者:毛星云 邮箱: h ...
- 【Visual C++】游戏开发笔记三十一 回归季 游戏开发资料整理打包下载 专栏行文思路整理
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 超全 泛微 E9 Ecology 9开发资料大全 开源资源下载 泛微E9二次开发 泛微开发实战经验 泛微开发实战例子 泛微二次开发项目例子 泛微二次开发Demo 泛微二次开发完整例子 泛微二次开发入门
由于工作需要,E9在泛微一推出来,以前所在的企业就第一时间上线了,经过四年多的运行,功能强大再加上在上面开发非常多的业务,一般的企业员工只需要打开泛微就可以处理完平时信息化的业务.后来 ...
- 瑞芯微的linux内核文件在哪里下载,瑞芯微最新开发资料下载--rk3399 ubuntu16.04开发说明...
rk3399 ubuntu16.04 开发说明 1 下载和解压 ubuntu rk3399-excavator ubuntu 根文件系统是基于 ubuntu-base-16.04 来创建的.ubunt ...
- 飞信Fetion历史数据库研究(History.dat)——嵌入式数据库SQLite介绍(转)
最近使用飞信,但发现不能将历史消息像QQ消息那样导出,感觉很不爽. 当在飞信中设置(操作–选项–个人设置–消息历史)了保存历史消息之后,飞信的历史消息数据保存的路径如下: 2008的消息存储路径: v ...
- Xamarin Anroid开发教程之下载安装Xamarin
Xamarin Anroid开发教程之下载安装Xamarin Xamarin在过去安装时都会检查系统中是否安装了前面所提供的内容.而后来,Xamarin安装时只提供安装步骤,其它内容都需要读者自己下载 ...
最新文章
- PyTorch 笔记(01)— Ubuntu 使用 pip 清华源安装 PyTorch
- Tensorflow 可视化 TensorBoard 尝试~
- python跳出双层for循环的解决方法
- uploadify.php 漏洞,PhotoStore “uploadify.php”任意文件上传漏洞
- 3dsmax子菜单无法选择_3DsMax—用平面图片制作3D模型
- 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别
- /etc/bashrc和/etc/profile
- 各种编译环境中如何为C++添加命令行参数(Command-line parameter)
- 河北省科技创新平台用例图
- Unity采用Forge Networking Remastered数据的远程传输 Basic RPC Example
- C语言中图形题,c语言图形输出习题.doc
- DIY实用工具——看看大神手下的示波器
- Hex转Bin小工具
- 跑分软件测试原理,只会比高低?教你三分钟看懂安兔兔跑分
- ANC降噪蓝牙耳机软件工程的数学原理
- 1.21 同级比较 倒装句 否定Neither
- linux 解决内存不足问题(设置虚拟内存)
- 计算机 桌面显示桌面图标不见了,显示桌面图标不见了怎么办,小编教你电脑显示桌面图标不见了怎么解决...
- openid与商户appid不匹配
- HDU4622 Reincarnation