当前位置: 移动技术网 > IT编程>开发语言>.net > .net DataExcel通信组件使用 搭建简单文件服务器

.net DataExcel通信组件使用 搭建简单文件服务器

2018年11月01日  | 移动技术网IT编程  | 我要评论

北京农业大学学生证,贺树峰的妻子,米洛索维奇

.net dataexcel通信使用 搭建简单文件服务器 使用.net dataexcel通信搭建一个简单的文件服务器。
通信简单介绍 1,通信使用tcp协议。 2,采用session机制,控制简单通信安全与连接限制防攻击。 3,采用开放协议包格。(32字节数据包) 4,采用网络断开,自动连接机制保证连接。 5,采用压缩机械压缩大数据(比如.net 里面datatable,dataset的传输)。 6,采用事件机制,更容易,更符合.net开发习惯。 7,采用异步传输,较大的连接与并发。 8,采用数据包头,解决粘包。 9,采用命令方式,更容易扩展。 10,采用允许事件,解密保证通信数据绝对安全。(只针对通信)。 11,允许可扩展通信,保证程序各版通信的版本管理。 12,采用无符号以及unicode编码,保证各平台的兼容性。(此通信的java版本)
主要类及使用方法介绍:
服务器端 服务器端 使用 socketlistener 类进行监听。 socketlistener listener = new socketlistener();

private void btnstart_click(object sender, eventargs e)
{
//this.listener.dbhelper.connectionstring = frm.txtdatabase.text;
listener.port = int.parse(this.txtport.text); //这个是必须的,设置监听的端口
//listener.beforedatareceive += new socketlistener.beforedatareceiveeventhandler(listener_beforedatareceive);
listener.datareceive += new socketlistener.datareceiveeventhandler(server_datareceive); //这个是必须的,用于接收自定义的命令。
//listener.clientchanged += new clientchangedhandler(listener_clientchanged);
listener.regeditsession += new feng.net.tcp.socketlistener.regeditsessioneventhandler(listener_regeditsession); //这个是必须的,注册session事件,指定连接是被允许。
//listener.loged += new socketlistener.logeventhandler(listener_loged);
//listener.connectioned += new socketlistener.connectedeventhandler(listener_connectioned);
//listener.versionchecked += new socketlistener.versioncheckedeventhandler(listener_versionchecked);
listener.path = this.txtpath.text; //这个不是必须的,设置服务器文件路径,用于做文件服务根目录。
listener.startlistening(); //这个是必须的,开启监听。
}
void listener_regeditsession(object sender, regeditsessioneventargs e)
{
if (e.password == "1001" && e.user == "1001") //可以在这里用对比。
{
e.session = new random(datetime.now.millisecond).next(100, short.maxvalue - 10); //返回随意一个session。
return;
}
}
客户端 客户端 使用socketclient类
private static socketclient _client = null;
public static socketclient client
{
get
{
if (_client == null)
{
_client = new socketclient();
_client.port = port; //这个是必须的设置远程服务监听的端口。
//_client.host = "yufb12.eicp.net";//花生壳
_client.ipadress = system.net.ipaddress.parse(ip); //这个是必须的设置远程服务器的ip。
_client.startclient();
}
return _client;
}
} 注意:如果这样使用,因为是属性,所以第一次调连接可能没有完成,所以你需要提示调用一次这个静态属性。 winform窗口类注册客户端的连接事件。在连接事件注册session。 client.connected += new socketclient.connectedeventhandler(client_connected); //这里是必须的。
void client_connected(object sender, socketclient sh) //这里是必须的。
{
sh.regeditsession("1001", "1001"); //用户名与密码,配合服务器数据库使用。保证连接是有效且被允许的。
}
文件服务器所使用的内置函数
string[] paths = client.getpaths(path); //返回服务器路径中的所有文件夹。 string[] files = client.getfiles(path); //返回服务器路径中的所有文件。
tcpfileinfo fti = client.getfileinfo(file); //返回服务器路文件的文件属性。
byte[] data = client.downfile(path); //下载服务器路文件数据流。
client.sendfiletoserver(path, dlg.filename); //上传文件到服务器目录。
下面是自定义命令示例:
客户端发送自定包示例: public const int yourprojectname= 0x0251;
public const int yourprojectname _sqlitequery0 = 0x0234; private void querysqlite(string sql)
{
feng.net.packethelper ph = new feng.net.packethelper();
ph.packetmaincommand = yourprojectname;
ph.packetsubcommand = yourprojectname_sqlitequery0 ;
using (feng.io.bufferwriter bw = new feng.io.bufferwriter())
{
bw.write(sql); bw.write(new byte[]{});
ph.packetcontents = bw.getdata();
}
byte [] data=new byte [0];
if (client.send(ph, out data))
{
ph = feng.net.packethelper.get(data);
using (feng.io.bufferreader reader = new feng.io.bufferreader(ph.packetcontents))
{
datatable table = reader.readdatatable();
}
}
}
类packethelper 为开放数据包。
ph.packetmaincommand = yourprojectname; //packetmaincommand 为主命令,一般为你的项目名称。
ph.packetsubcommand = sqlitequery; //sqlitequery 为子命令,定义具体函数操作。
bufferwriter 类 为转化为二进制数据流。 bw.write(sql); //write有40多个函数的重载。此处为要送的sql语句。 bw.write(new byte[]{}); //此处保证数据向下个版本的兼容性。 ph.packetcontents = bw.getdata(); //packetcontents 这里为要发送的内容。bw.getdata()获取二进制数组。 if (client.send(ph, out data)) //这里为阻塞发送,将阻塞当前线程。符合windows开发人员的习惯。超过超时时间返回false.
ph = feng.net.packethelper.get(data); //通过返回二制流,反回数据包。 packethelper.get 这个静态函数为得到一个实例。 bufferreader 类 为从二进制转化某类对象 datatable table = reader.readdatatable(); //读取返回的datatable对象。 服务器端示例:
public const int sqlitequery = 0x0251;
public const int yourprojectname = 0x0234;
void server_datareceive(object sender, reciveeventargs e, packethelper ph)
{
if (ph.packetmaincommand == yourprojectname)
{
switch (ph.packetsubcommand)
{
case sqlitequery:
using (feng.io.bufferreader reader = new feng.io.bufferreader(ph.packetcontents))
{
string sql = reader.readstring();
datatable dt = query(sql);
using (feng.io.bufferwriter bw = new feng.io.bufferwriter())
{
bw.write(dt);
ph.packetcontents = bw.getdata();
e.sockethelper.send(ph);
}
}
break;
default:
break;
}
}
}
if (ph.packetmaincommand == yourprojectname) //判断主命令 switch (ph.packetsubcommand) //确定执行的子命令 string sql = reader.readstring(); //读取参数 这里发送的sql语句。 datatable dt = query(sql); //调用函数 获取datatable. bw.write(dt); //写数据流 把查询的datatable发送出云。
e.sockethelper.send(ph); //直接发送当前数据包。

socketclient预置的函数: feng.net.tcp.socketclient.application_applicationexit(object, system.eventargs) feng.net.tcp.socketclient.beginpost(feng.net.packethelper, system.asynccallback) feng.net.tcp.socketclient.beginpost(feng.net.packethelper, system.asynccallback, object) feng.net.tcp.socketclient.close() feng.net.tcp.socketclient.connectcallback(system.iasyncresult) feng.net.tcp.socketclient.createserverpath(string) feng.net.tcp.socketclient.deleteserverfile(string) feng.net.tcp.socketclient.deleteserverpath(string) feng.net.tcp.socketclient.docallback(feng.net.tcp.asyncresultpost) feng.net.tcp.socketclient.dochanged(feng.net.packethelper) feng.net.tcp.socketclient.dorecvfile(feng.net.packethelper) feng.net.tcp.socketclient.dorecvtext(feng.net.packethelper) feng.net.tcp.socketclient.downfile(string) feng.net.tcp.socketclient.downloadfilefromserver(string, string) feng.net.tcp.socketclient.endpost(system.iasyncresult) feng.net.tcp.socketclient.getfileinfo(string) feng.net.tcp.socketclient.getfiles(string) feng.net.tcp.socketclient.getonlineuser() feng.net.tcp.socketclient.getpaths(string) feng.net.tcp.socketclient.getreceivedata(byte[]) feng.net.tcp.socketclient.getsenddata(byte[]) feng.net.tcp.socketclient.onclientchanged(feng.net.packethelper) feng.net.tcp.socketclient.onclose(feng.net.packethelper) feng.net.tcp.socketclient.ondatareceive(feng.net.reciveclienteventargs) feng.net.tcp.socketclient.ondownloadfile(feng.net.packethelper) feng.net.tcp.socketclient.ongetreceivedata(object) feng.net.tcp.socketclient.onlinechecked(out int, byte[]) feng.net.tcp.socketclient.onotherlogin(feng.net.packethelper) feng.net.tcp.socketclient.onrecviceuserdata(feng.net.packethelper) feng.net.tcp.socketclient.onsessionchanged(int) feng.net.tcp.socketclient.onsystemmessagerecv(feng.net.packethelper) feng.net.tcp.socketclient.ontoalluser(feng.net.packethelper) feng.net.tcp.socketclient.ontootheruser(feng.net.packethelper) feng.net.tcp.socketclient.post(feng.net.packethelper) feng.net.tcp.socketclient.postcallback(object) feng.net.tcp.socketclient.read() feng.net.tcp.socketclient.receivecallback(system.iasyncresult) feng.net.tcp.socketclient.regeditsession(string, string) feng.net.tcp.socketclient.regeditsession(string, string, byte[]) feng.net.tcp.socketclient.send(string) feng.net.tcp.socketclient.send(feng.net.packethelper) feng.net.tcp.socketclient.send(feng.net.packethelper, out byte[]) feng.net.tcp.socketclient.send(int, byte[], out byte[]) feng.net.tcp.socketclient.sendandwaitingvalue(feng.net.packethelper, out byte[]) feng.net.tcp.socketclient.sendcallback(system.iasyncresult) feng.net.tcp.socketclient.sendclosed() feng.net.tcp.socketclient.sendfiletootheruser(string, string) feng.net.tcp.socketclient.sendfiletootheruser(system.collections.generic.list, string) feng.net.tcp.socketclient.sendfiletoserver(string, string) feng.net.tcp.socketclient.sendtoallclientfile(string) feng.net.tcp.socketclient.sendtoalluser(string) feng.net.tcp.socketclient.sendtoalluser(byte[]) feng.net.tcp.socketclient.sendtoalluser(feng.net.packethelper) feng.net.tcp.socketclient.sendtootheruser(string, string) feng.net.tcp.socketclient.sendtootheruser(string, byte[]) feng.net.tcp.socketclient.sendtootheruser(system.collections.generic.list, string) feng.net.tcp.socketclient.sendtootheruser(system.collections.generic.list, byte[]) feng.net.tcp.socketclient.sendtootheruser(system.collections.generic.list, feng.net.packethelper) feng.net.tcp.socketclient.socketclient(system.net.ipaddress, int) feng.net.tcp.socketclient.socketclient() feng.net.tcp.socketclient.socketclient(system.net.ipaddress) feng.net.tcp.socketclient.socketclient(string) feng.net.tcp.socketclient.startclient() feng.net.tcp.socketclient.startconnection() feng.net.tcp.socketclient.tostring() feng.net.tcp.socketclient.updatechecked(out int, byte[]) feng.net.tcp.socketclient.versionchecked(string, int, out int, out string, byte[]) feng.net.tcp.socketclient.autoconnected feng.net.tcp.socketclient.defaultwaitconnectiontime feng.net.tcp.socketclient.filetemppath feng.net.tcp.socketclient.hasconnected feng.net.tcp.socketclient.host feng.net.tcp.socketclient.index feng.net.tcp.socketclient.ipadress feng.net.tcp.socketclient.lastrecvdatatime feng.net.tcp.socketclient.name feng.net.tcp.socketclient.path feng.net.tcp.socketclient.port feng.net.tcp.socketclient.session feng.net.tcp.socketclient._autoconnected feng.net.tcp.socketclient.autoconnectedevent feng.net.tcp.socketclient.autonconnectthread feng.net.tcp.socketclient._client feng.net.tcp.socketclient._defaultwaitconnectiontime feng.net.tcp.socketclient._filetemppath feng.net.tcp.socketclient._hasconnected feng.net.tcp.socketclient._host feng.net.tcp.socketclient._index feng.net.tcp.socketclient._ipaddress feng.net.tcp.socketclient._lastrecvdatatime feng.net.tcp.socketclient._name feng.net.tcp.socketclient.newclientobj feng.net.tcp.socketclient.objnewstarting feng.net.tcp.socketclient._path feng.net.tcp.socketclient._port feng.net.tcp.socketclient.readonlyindex feng.net.tcp.socketclient.readonlyobject feng.net.tcp.socketclient.recvbuffer feng.net.tcp.socketclient.sendlist feng.net.tcp.socketclient._session feng.net.tcp.socketclient._userlist feng.net.tcp.socketclient.beforedatareceive feng.net.tcp.socketclient.beforesenddata feng.net.tcp.socketclient.clientchanged feng.net.tcp.socketclient.closedconnected feng.net.tcp.socketclient.connected feng.net.tcp.socketclient.datareceived feng.net.tcp.socketclient.downloadfile feng.net.tcp.socketclient.filerecvcompleted feng.net.tcp.socketclient.filerecving feng.net.tcp.socketclient.initonlineusers feng.net.tcp.socketclient.otherlogin feng.net.tcp.socketclient.recviceuserdata feng.net.tcp.socketclient.sessionchanged feng.net.tcp.socketclient.systemmessagerecv feng.net.tcp.socketclient.textrecv

msqlclient预置函数:
feng.net.tcp.sqlclient.beginquerytable(string, feng.net.netcallbacks.querytablecallback) feng.net.tcp.sqlclient.columnexists(string, string) feng.net.tcp.sqlclient.columnexists(string, string, int) feng.net.tcp.sqlclient.executesql(string) feng.net.tcp.sqlclient.executesql(string, params system.data.sqlclient.sqlparameter[]) feng.net.tcp.sqlclient.executesql(string, int) feng.net.tcp.sqlclient.executesql(string, int, params system.data.sqlclient.sqlparameter[]) feng.net.tcp.sqlclient.executesqltran(system.collections.generic.list) feng.net.tcp.sqlclient.executesqltran(system.collections.generic.list) feng.net.tcp.sqlclient.executesqltran(system.collections.generic.list, int) feng.net.tcp.sqlclient.executesqltran(system.collections.generic.list, int) feng.net.tcp.sqlclient.exists(string) feng.net.tcp.sqlclient.exists(string, params system.data.sqlclient.sqlparameter[]) feng.net.tcp.sqlclient.exists(string, int) feng.net.tcp.sqlclient.exists(string, int, params system.data.sqlclient.sqlparameter[]) feng.net.tcp.sqlclient.getmaxid(string, string) feng.net.tcp.sqlclient.getmaxid(string, string, int) feng.net.tcp.sqlclient.getsingle(string) feng.net.tcp.sqlclient.getsingle(string, params system.data.sqlclient.sqlparameter[]) feng.net.tcp.sqlclient.getsingle(string, int) feng.net.tcp.sqlclient.getsingle(string, int, params system.data.sqlclient.sqlparameter[]) feng.net.tcp.sqlclient.postcallbac(system.iasyncresult) feng.net.tcp.sqlclient.query(string) feng.net.tcp.sqlclient.query(string, params system.data.sqlclient.sqlparameter[]) feng.net.tcp.sqlclient.query(string, int) feng.net.tcp.sqlclient.query(string, int, params system.data.sqlclient.sqlparameter[]) feng.net.tcp.sqlclient.querytable(string) feng.net.tcp.sqlclient.sqlclient(system.net.ipaddress, int) feng.net.tcp.sqlclient.sqlclient() feng.net.tcp.sqlclient.sqlclient(system.net.ipaddress) feng.net.tcp.sqlclient.sqlclient(string) feng.net.tcp.sqlclient.tabexists(string) feng.net.tcp.sqlclient.tabexists(string, int)



如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网