视窗
loading...
您现在的位置:首页 > IT认证 > 计算机二级考试 >

利用Winsock控件实现局域网通信


   对于局域网用户中的编程爱好者来说,如果能自己编一个局域网通信程序,那么这一切将是多么美妙!可是,如果要从头开始完全由自己来编写一段用于通信的程序,必须对相关的网络协议及其他的一些较底层的技术有较深入的了解,这可不是一件容易的事。而现在有了Winsock控件,一切就不同了,它已经替你封装了所有烦琐的技术细节,并提供了访问TCP和UDP网络服务的方便途径。你只需通过设置控件的属性并调用其方法就可轻易连接到一台远程计算机中,并且还可以双向交换数据,而这一切都不需你了解TCP的细节或调用低级的Winsock APIs。

  Winsock控件可以供Microsoft Acess、Visual Basic,Visual C++或Visual Foxpro的开发人员使用。本文以Visual Basic 6企业版为开发环境来向大家介绍一下Winsock控件的初步应用。

  Winsock控件可以使用两种协议:TCP协议和UDP协议,下面来分别介绍。

  TCP协议即数据传输协议,它允许创建和维护与远程计算机的连接,使其彼此可以进行数据传输。利用TCP协议通讯必须分别建立客户应用程序和服务器应用程序。

  在创建客户应用程序时,必须知道服务器计算机名或其IP地址(存于RemoteHost属性)、及服务器计算机进行侦听的端口(存于RemotePort属性),然后调用Connect方法。

  创建服务器应用程序时,就应相应设置一个侦听端口(LocalPort属性)并调用listen方法。当客户机需要连接时(connect),就会发生ConnectionRequest事件。为了完成连接,你可以在ConnectionRequest事件中调用Accept方法。建立连接后,任何一方计算机都可以发送、接收对方数据。如果你要发送数据,需调用SendData方法。当接收到数据时,会发生DataArrival事件,调用DataArrival事件中的GetData方法就可以获得对方传送的数据。

  说了这么多,大家可能还是不太了解,让我用程序来详细说明。

  如果只有两台计算机,那十分容易。假设甲机为客户机,乙机为服务器,且其IP为192.192.192.1,接收端口为1200(任意选一个未被使用的端口即可)。首先在甲机客户端程序中加入一个Winsock控件,起名为sckconnect,并设置其属性:RemoteHost=“192.192.192.1”,(即甲机IP地址), RemotePort=1200(即甲机侦听端口);再在乙机服务器程序中假如一个名为sckserver(0)的Winsock控件,其LocalPort=1200,在乙机服务器程序中Form_Load()加入

  sckserver(0).bind sckserver(0).LocalPort '与本地端口绑定

  sckserver(0).listern ' 侦听

  如果要传输数据,两机必须先建立连接。建立连接的程序如下:

  甲机客户机要先请求连接

  sckconnect.connect sckconnect.RemoteHost, sckconnect.RemotePort

  此句执行时会触发服务器程序中的ConnectRequest事件,在此过程中决定是否建立连接,其代码如下:

  Private sub sckserver_connectionrequest(index as Integer,Byval requestid as long)

  if sckserver.count=1 then

  load sckserver(1)

  sckserver(1).accept requestId

  end if

  end sub

  连接建立好以后,甲机或乙机都可以应用SendData方法来传送数据。例如,如果是甲机要传送一个叫string的字符串,只需在代码中加入:

  sckconnect.SendData string

  甲机传送数据后,会触发乙机的DataArrival事件,在其过程中用GetData方法可以收到传送的数据:

  Private sub sckserver_DataArrival(Index as integer,Byval BytesTotal as long)

  dim sdata as string

  sckserver(1).GetData sdata,VBstring

  end sub

  最后别忘了在关闭程序前要先关闭Winsock控件

  privat sub form_unload(cancel as integer)

  if sckconnect.state <>sckclosed then

  sckconnect.close

  end if

  end sub

  这只是最简单的情况,如果有多台计算机,那就稍微复杂一些,客户端程序可以不做改动,而服务器端程序需要略做改动:

  Private sub sckserver_connectrequest(Index as Integer,Byval requestid as long)

  dim sip as string

  dim I as integer

  sip=sckserver(0).RemoteHostIP '获得登录者的IP地址

  I=1

  Do while I<=sckserver.ubound '检查是否已经有该地址的记录

  If sckserver(I).RemoteHostIP=sip then '如有,不必加载新的控件

  Sckserver(I).Accept requestid

  Exit sub

  End if

  I=I+1

  Loop

  Load sckserver(I) '否则,加载新的控件

  Scksrver(I).accept requestID

  End sub

  注意到:以上的信息交谈实际上都发生在客户机与服务器之间,如果要做成聊天室那样,每个人的话都可以被别人“听到”,那就要在服务器端的DataArrival事件中,把接收到的客户机传来的数据,转发给所有客户机即可。

  其循环转发信息的代码如下:

  For I=1 to sckserver.count

  if sckserver(I).state<>sckclosed then

  sckserver(I).SendData sdata

  end if

  next I

  怎么样,这样我们就作好了自己的通信软件!

  不过,不知大家注意到没有,上述程序都需要有一台计算机做为服务器,但如果我们的局域网中没有哪台计算机是可以常开的,也就是说,如果服务器端程序没有运行的话,其他客户端程序也没有办法通信。而这种情况却可能是经常出现的!至少,我所用的局域网那就是这样的。难道这样我们就无法享受局域网通信的乐趣了吗?

  不要急,记得吗,我们的Winsock控件还有另一个主角:UDP协议。

  UDP协议也称为用户数据报文协议,是一个无连接协议。何谓无连接协议?就是说利用此协议连接时,不必象TCP协议那样:需要服务器端侦听,客户机端请求连接,服务器端建立连接后双方才能通信。另外,UDP应用程序可以是客户机,也可以是服务器程序,而不必向TCP应用程序那样必须分别建立客户机程序和服务器程序。

  下面,来简述一下UDP协议通信的过程:UDP协议中,为了在甲乙两机中传输数据,必须先分别设置两机的LocalPort属性;再将甲机的RemoteHost属性设置为乙机的IP地址,RemotePort属性设置为乙机的LocalPort属性值,此时甲机调用SendData方法就可以传送数据了,乙机同样使用DataArrival事件中的GetData方法来获取甲机发送给乙机的信息。如想乙机向甲机传送数据,只需仿照上面的过程设置即可。

  用UDP协议来传输信息较TCP协议来说简单的多,它无须侦听(LISTEN),也无须请求连接(CONNECT),就象我们平时发信一样,只要写好地址及收信人姓名并发送出去即可。我们可以借此来编写一个局域网中的信息传送程序,下面来简单介绍以下程序中想实现的功能及其基本思想:

  首先,我们一定想让程序的图标显示在system tray中而不显示在任务栏中吧!这要是自己编程实现可不是太容易,幸好VB光盘中在common\tools\vb\unsupport\systemTray 中有一个现成的程序,我们只要把它编译成systray.ocx 控件,然后在编写自己的程序时添加此控件即可。其使用方法十分简单,它已经定义好了鼠标单击、双击等事件,你只需编写相应的鼠标事件即可,这里不再多说。

  程序的关键是:UDP协议在通讯时要知道对方的IP和Port,这要如何实现呢?最简单的方法是建立一个配置文件,里面放置了局域网上每台计算机的名字、IP和Port,在程序初始化时读出所有信息,在程序中只要知道向谁通信,读出其对应的IP和Port即可。

  我们知道了每台计算机的IP和Port,但我们怎样才能知道其它计算机是否在线呢,否则发出信息别人收不到怎么办?我们可以把此程序放在启动菜单中,让其一开机就自动启动,并最小化,放于窗口右下角的system tray中。在程序刚开始运行时,它会自动向它从配置文件中所知道的所有IP发一条信息:“我来了!”,如果有计算机在线,它会自动返回一条信息:“欢迎!”,如此则两机通信成功,它们会分别把对方的名字加入到自己的可通信人名单中去;如果有计算机关机,程序在退出之前会自动向所有人告别:“再见!”,接收到此信息的计算机会自动把发送信息的计算机的名称从自己的可通信人名单中去除。这样,如果某人不在线,你将无法发送信息给它;如果除了你以外,其他人都没有开机,那你的可发送人名单中将没有任何人。而其它人只要一上线,会自动去你那里“登记”,其他人只要一离线,会自动去你那里“告别”,你可以据此知道他人是否正在使用计算机,你甚至可以以此程序来统计他人的每天上机时间,不错吧!

  好了,一个局域网通信的程序的基本模型已经有了,并不复杂吧!大家赶快动手吧,来享受用自己的程序来聊天的乐趣!

  不过,要想编写一个出色的程序,不光是要有良好的创意与功能,更重要的是程序的兼容性与容错性。本例中,对错误处理没有做详细的解释,关于这一点,大家可以在Winsock控件的error事件及其帮助中找到满意的答案。

  另外,还可以从以下几方面来考虑功能的扩充:如传送图形、声音等多媒体信息、局域网互传文件(主动传送)、历史通话记录、系统日志、个人上机时间统计等等,而所有的这一切仅仅取决于你的想象力与你的聪明才智!下面,笔者以传送文件为例来讲一讲其功能实现的代码。

  你可以把本地的文件(图形、声音等可以先存成临时文件)以二进制文件的方式来打开它,将其内容全部读入一个byte类型的数组中,本地机代码如下:

  dim myfile () as byte

  dim position as long

  open "filename" for binary as #1

  position=0

  do while not eof(1)

  position=positon+1

  redim preserve myfile (1 to position)

  get #1,,myfile(position)

  loop

  close #1

  

  再向远程机传送这个字节数组

  sckserver.SendData myfile

  远程机收到这个数组之后,再以二进制文件的方式打开一个新目标文件,将数组内容写入这个新打开的文件,如果是bmp图片就将其放入picture图片框中,如果是wav文件,就播放。这样,局域网中的两个人就可以通过语言、图片、文字来交流了。

  远程机代码如下:

  Private sub sckconnect_DataArrival(byval bytestotal as long)

  dim receivefile(1 to bytestotal)as byte

  sckconnect.GetData receivefile,vbarray+vbbyte

  '告诉Winsock控件收到的是字节数组类型的数据

  open "c:\temp\文件名" for binary as #1

  for I=1 to bytestotal

  put #1,,remotearray(I)

  next I

  clost #1

  end sub

闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱閻庡厜鍋撻柛鏇ㄥ亞閿涙盯姊虹捄銊ユ珢闁瑰嚖鎷�

闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱閻庡厜鍋撻柛鏇ㄥ亞閿涙盯姊虹捄銊ユ珢闁瑰嚖鎷�

闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱濠电偛妫欓幐鍝ョ矆婢舵劖鐓涢柛銉e劚閻忊晠鏌涚仦璇插闁哄本娲熷畷鐓庘攽閸パ屾П闂佽瀛╅懝楣冣€﹂悜钘夎摕闁靛ǹ鍎弨浠嬫煕閳╁厾顏堟偟閺冨倻纾藉ù锝囨嚀閺佸墽绱撳鍕獢鐎殿喖顭烽弫鎾绘偐閼碱剦妲规俊鐐€栭崝褏鈧潧鐭傞崺鈧い鎺嶇贰濞堟粓鏌″畝鈧崰鏍箺鎼淬劌纾兼慨姗嗗墰閵堫噣姊绘担绛嬪殐闁哥噥鍋婂畷鎯邦樄闁哥偛鐖煎铏圭磼濡崵鍙嗛梺纭呭Г缁海鍒掗弮鍫晢闁告洦鍓涢崢浠嬫⒑缂佹◤顏勵嚕閸洖绠归柟鎵閻撶喖骞掗幎钘夌閻忕偠妫勭粊顐︽⒒娴d警鏀伴柟娲讳簽缁骞嬮敐鍥╊啍闂傚倸鍊峰ù鍥р枖閺囥垹闂柨鏇炲€哥粻顖炴煥閻曞倹瀚�
闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢敂钘変罕濠电姴锕ら悧鍡欑矆閸喓绠鹃柟瀛樼懃閻忣亪鏌涚€n剙鏋戦柕鍥у瀵粙顢曢~顓熷媰闂備胶绮敮锛勭不閺嶎厼钃熼柡鍥╁枔缁犻箖鏌涢…鎴濇灈濠殿喖閰e铏规嫚閸欏鏀銈嗘肠閸℃鍊掗梻鍌欑劍閹爼宕曢懡銈呯筏闁兼亽鍎插▍鐘绘煙缂佹ê纭€鐟滅増甯楅崑鍌炲箹濞n剙鐏╂繛鍫燁殜閹鈻撻崹顔界亪闂佺粯鐗曢崥瀣┍婵犲洦鍊婚柤鎭掑劜濞呭棝姊洪崨濠冨瘷闁告劦浜滅敮妤€鈹戦悩鍨毄闁稿鐩幃娲Ω瑜嶉崹婵堚偓鍏夊亾闁逞屽墴閹崇偤鏌嗗鍡楁異闂佸啿鎼€氼剙鐨繝鐢靛仜椤曨參宕㈣閹椽濡搁埡浣告優闂佺ǹ鐬奸崑鐐烘偂濞戙垺鐓曢柟鎵虫櫅婵″ジ鏌嶈閸撴繂鐣烽悽闈涘灊闁哄啫娲㈡禍褰掓煙閻戞ɑ灏甸柛娆忔閳规垿鎮欓弶鎴犱紘濠电偛鎳忓ú婊堝焵椤掍胶鍟查柟鍑ゆ嫹闂傚倸鍊峰ù鍥敋瑜嶉湁闁绘垼妫勯弸渚€鏌熼梻鎾闁逞屽厸閻掞妇鎹㈠┑瀣;妞ゆ牗姘ㄧ粔铏光偓瑙勬礀瀹曨剝鐏掗柣鐘叉搐濡﹤岣块鐐粹拻濞达綁顥撴稉鑼磼闊厾鐭欑€殿喚鏁婚、妤呭礋椤掆偓娴犲ジ姊洪崨濠庢畼闁稿﹥鍨堕幆鏃堝Ω閵壯冣偓鐐烘⒑閹稿海绠撻柟鍐查叄閸╂稒寰勭€n剛顔曢柣搴f暩鏋悽顖氱埣閺岀喖鎼归顒冣偓鍧楁煟濞戝崬鏋ら柍褜鍓ㄧ紞鍡涘窗閺嶎偆涓嶉柨婵嗘缁♀偓婵犵數濮撮崐鎼侇敂椤愶附鐓欓柡瀣靛亜婵倹鎱ㄦ繝鍐┿仢鐎规洏鍔嶇换婵嬪礃閿濆棗顏哥紓鍌氬€风粈渚€顢栭崱娆愭殰闁跨喓濮寸粻姘舵煕閵夛絽濡兼い鏇憾閺屸剝寰勭€n亞浠撮梺鍝ュ亼閸旀垵顫忓ú顏勭闁绘劖褰冩慨宀勬⒑閸涘﹥鐓ョ紒澶婄秺閺佹劙鎮欓崫鍕敤濡炪値鍏欓崕閬嶆煀閿濆懐鏆﹂柛顐f礃閺呮煡鏌涘☉鍗炲箰闁规灚鍊曢埞鎴︽倷瀹割喖娈堕梺鍛婎焼閸パ呯枃濠殿喗銇涢崑鎾搭殽閻愬弶顥㈢€规洘锕㈤、娆撴嚃閳哄﹥效濠碉紕鍋戦崐鏍礉閹达箑鍨傛繛宸簼閸庡﹪鏌¢崘锝呬壕缂備胶绮换鍫熸叏閳ь剟鏌ㄥ┑鍡橆棤闁靛棙鍔欓弻锝嗘償閵忥絽顥濋梺纭呭Г缁苯宓勯梺瑙勫婢ф寮查幖浣圭叆闁绘洖鍊圭€氾拷闂傚倸鍊搁崐鐑芥嚄閸洖绠犻柟鍓х帛閸嬨倝鏌曟繛鐐珔闁搞劌鍊块弻娑㈠箛椤撶姰鍋為梺鍓插亽娴滎亪寮婚悢琛″亾閻㈢櫥鐟扮毈闂備胶绮敮鎺楁晝閵堝鐓橀柟杈鹃檮閸嬫劙鏌涘▎蹇fЧ闁诡喗鐟ラ埞鎴︽倷閸欏娅¢梺鎼炲妼缂嶅﹤锕㈡笟鈧娲箰鎼达絿鐣靛┑鈽嗗亝閻╊垶骞嗙仦鐐劅闁靛⿵濡囬崢鎾绘偡濠婂嫮鐭掔€规洘绮岄埢搴ㄥ箻瀹曞洨鏋冮梻浣哥秺閸嬪﹪宕楀鈧鎼佸籍閸喓鍘甸柡澶婄墦缁犳牕顬婇鈧弻娑氣偓锝庝憾閸庢棃鏌$仦鍓ф创妞ゃ垺娲熸俊鍫曞川椤旈敮鍋撻崜褏纾介柛灞炬皑琚﹂梺绋款儐閹瑰洤顫忕紒妯诲闁荤喐澹嗘禍浼存⒑缂佹ê閲滅紒鐘虫尰娣囧﹪鎮介崨濠傗偓鐑芥煟閵忋垺鏆╂い锔诲灦濮婃椽宕崟顐f闂佺粯顨呭Λ娑㈡儉椤忓浂妯勯梺鍝勬湰閻╊垶鐛崶顒夋晬婵炴垶鍝庨埀顒€锕︾槐鎾存媴閹绘帊澹曢梻浣芥硶閸o箓骞忛敓锟�闂傚倸鍊峰ù鍥敋瑜忛懞閬嶆嚃閳轰胶绛忔繝鐢靛У閻旑剛绱為弽褜鐔嗛柤鎼佹涧婵洭鏌涢妸銉モ偓鍦崲濠靛洨绡€闁稿本鍑规导鈧俊鐐€愰弲鐘诲绩闁秴桅闁告洦鍨扮粻鎶芥煙鐎涙ḿ绠栨繛鍫e皺缁辨挻鎷呮搴ょ獥闂侀潻缍囩徊浠嬵敋閿濆閱囬柡鍥╁枎閳ь剛鍏橀弻娑⑩€﹂幋婵呯凹闂佺粯绻嶆禍婊堝煘閹达附鍊烽柤纰卞墮椤も偓闂備焦鎮堕崝灞炬櫠鎼达絽鍨濇慨妯垮煐閻掕偐鈧箍鍎遍幊鎰板礉閹绢喗鈷戦柛娑橈工婢瑰啴鏌涘☉鍗炵伇婵″樊鍓氱换婵嬫偨闂堟刀銉︺亜閿濆嫮鐭欓柛鈹惧亾濡炪倖宸婚崑鎾绘煕閻旈攱鍋ラ柛鈹惧亾濡炪倖甯掗崐褰掑吹閳ь剟姊洪幐搴㈢8闁搞劍妞介獮蹇涘川閺夋垹顦梺鍦帛鐢顢橀崸妤佲拻濞达絽鎳欒ぐ鎺戝珘妞ゆ帒鍊瑰畷鑼偓骞垮劚椤︻垶鎳滆ぐ鎺撶厵缂備降鍨归弸鐔兼煟閹惧鎳囬柟顔筋殔閳藉鈻庣€n剛绐楀┑鐘媰鐏炶棄顫紓浣虹帛缁诲牓宕洪埀顒併亜閹哄秶鍔嶅┑顖涙尦閺屾盯鏁傜拠鎻掔闂佺娅曠换鍫濐潖濞差亜绀堥柤纰卞墮鐢儵姊虹粙娆惧剰闁硅櫕鍔楀Σ鎰版倷閸濆嫮鍔﹀銈嗗笒鐎氼參鍩涢幋锔界厽闁绘梻枪椤ュ鏌熼悾灞解枅闁哄矉绲借灃闁告劑鍔嬮幋鐑芥⒑閻熸壆鐣柛銊ョ秺閿濈偛鈹戠€e灚鏅為梺鍏间航閸庤櫕绂嶅▎鎾粹拻濞达絽鎲¢幆鍫熺箾鐠囇呯暤闁诡垰鐭傞、娆撴倷椤掆偓鎼村﹪姊虹化鏇炲⒉缂佸甯¢幃鈥斥枎閹扳晙绨婚梺鍦亾椤ㄥ懘宕悧鍫㈩浄闁哄鍩堝〒濠氭煏閸繃顥炲璺哄閺屾盯骞樼捄鐑樼€婚梺浼欑悼閸忔﹢寮幇鏉垮耿婵炲棙鍨瑰Σ鍥⒒娴e憡鍟為柛鏂跨箻瀵煡鍩℃担鍕剁秮椤㈡盯鎮欑划瑙勫闂備礁銈搁埀顒佺☉瀹撳棝鏌涘┑鍫濆妺闁逛究鍔嶇换婵嬪磼閵堝洤鎮戦梻浣告惈閼活垶鎮ч幘鑽ゅ祦婵せ鍋撴い銏$懇閹虫牠鍩℃繝鍌涘€涢梻鍌氬€烽懗鍫曞箠閹剧粯鍋ら柕濞у啫鐏婇悗骞垮劚濞层倝宕瑰┑瀣叆闁哄洨鍋涢埀顒€缍婇幃锟犲Ψ閿斿墽顔曢梺鐟邦嚟閸婃牠骞嬪┑鎾光偓鍧楁煟濡も偓閻楀繒寮ч埀顒勬⒑闁偛鑻晶瀛橆殽閻愯尙效妞ゃ垺鐟╅獮鍡氼槻閻熸瑱闄勭换婵嬫偨闂堟稐绮跺┑鈽嗗亝椤ㄥ懘婀佹俊鐐差儏濞寸兘鎮崇紒妯圭箚闁靛牆鎳庨弳鐔虹棯閹佸仮闁哄矉绻濆畷鎺戔槈閸楃偛濡奸梻浣呵规鍝ユ崲閹烘鐒垫い鎺戝枤濞兼劙鏌熼崫銉囩鐏嬪┑鐘绘涧濡盯寮抽敂鑺ュ弿婵☆垰鐏濋悡鎰版煕鐎n偄濮夌紒杈ㄦ尰閹峰懐鎷归婊呯獥闁荤喐绮庢晶妤呭垂閸噮娼栨繛宸簻缁犱即骞栫划鍏夊亾閾忣偆浜為梻鍌欒兌閹虫捇宕甸弽顓炵闁跨噦鎷�闂傚倸鍊峰ù鍥敋瑜嶉湁闁绘垼妫勯弸渚€鏌熼梻瀵割槮缂佺姷濞€閺岀喖骞戦幇顒傚帿闂佸搫妫欑划宥夊Φ閸曨垰绠涢柛鎾茶兌閺嗙姷绱撴担鎻掍壕闂佺硶鍓濆玻璺ㄧ不妤e啯鐓欓悗鐢告櫜缁辫櫕銇勮箛鎾跺闁哄绶氶弻娑㈩敃閿濆棛顦ㄩ梺绋匡功閺佹悂鎯€椤忓牜鏁囬柣鎰綑椤庢稑鈹戦悙鎻掓倯闁告梹鐟╁璇测槈閵忕姈鈺呮煥閺傚灝鈷旈柣鎾茶兌缁辨挻鎷呯粙搴撳亾閸︻厽鏆滈柨鐔哄О閳ь兛绀佽灃濞达絿鎳撻鎾剁磽娴e壊鍎忛柡鍛箞椤㈡洟鏁傜憴锝嗗闂佽崵鍠愰悷銉р偓姘煎幘濞嗐垽鎳犻鍌滐紲缂傚倷鐒﹂敋闁诲繐顕埀顒侇問閸n噣宕戞繝鍥モ偓浣糕枎閹炬潙浠奸悗鍏夊亾濠电姴鍟伴妶顐⑩攽閻樻剚鍟忛柛鐘愁殜婵¢潧鈽夐姀鐘碉紱闂佺懓澧界划顖炴偂閸愵亝鍠愭繝濠傜墕缁€鍫熺箾閸℃ɑ灏痪鎯х秺閺屾稑鈹戦崟顐㈠Б缂備讲鍋撳┑鐘叉处閸婄敻鏌ㄥ┑鍡涱€楅柡瀣枛閺屾稒鎯旈敍鍕懷囨煛鐏炲墽娲寸€殿喗鎸虫俊鎼佸Ψ閵壯呮喛闂佽崵鍠愮划搴㈡櫠濡ゅ啯鏆滄俊銈呮噺閸嬪倿鏌嶈閸撴瑩鈥旈崘顔嘉ч柛鈩冾殘閻熴劑姊洪幐搴㈢┛濠碘€虫川閸掓帡宕奸妷锔芥闂佽法鍣﹂幏锟�闂傚倸鍊搁崐宄懊归崶銊х彾闁割偆鍠嗘禒鍫㈢磼鐎n偒鍎ユ繛鍏肩墪閳规垿鎮╁畷鍥舵殹闂佺粯甯$粻鏍蓟閻旇櫣纾奸柕蹇曞У閻忓牆鈹戦埥鍡椾簼闁挎洏鍨藉濠氭晲婢跺浜滅紓浣割儐椤戞瑥螞閸℃瑧纾肩紓浣靛灩楠炴劙鏌涚€n偅宕屾慨濠勭帛閹峰懘鎮烽柇锕€娈濈紓鍌欑椤戝棛鏁幒妤佸仼婵犻潧顑呯粻鐟懊归敐鍛喐闁挎稒鐩娲传閸曨厜鐘绘煕閺傚潡鍙勯柕鍡楁嚇閹粓鎳為妷褍寮抽梻浣虹帛濞叉牠宕愰崷顓涘亾濮樼偓瀚�:webmaster@jscj.com闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱閻庡厜鍋撻柛鏇ㄥ亞閿涙盯姊洪悷鏉库挃缂侇噮鍨堕幃锟犳偄閹肩偘绨诲銈嗗姦閸嬪嫰鐛Ο鑲╃<濞达絽鎼崢鎾煛瀹€瀣М闁轰礁鍊婚幑鍕Ω瑜忛崢顖炴⒒娴h姤銆冪紒鈧担铏圭煋鐟滅増甯掗弸渚€鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓4008816886

相关文章

无相关信息
更新时间2022-03-13 10:53:42【至顶部↑】
联系我们 | 邮件: webmaster@jscj.com | 客服热线电话:4008816886(QQ同号) |  婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柟闂寸绾惧潡鏌熺€电ǹ啸缂佲偓婵犲洦鐓冪憸婊堝礈濮樿泛桅闁告洦鍨伴崡鎶芥煕閳╁喚娈旀い蹇d邯閺屾稑鈻庤箛鏇狀啋闂佸搫鐭夌紞渚€鐛崶顒夋晪闁告侗鍠楅惁婊堟⒒娴e懙褰掝敄閸℃稑绠查柛銉墯閸嬫ɑ銇勯弴妤€浜鹃悗瑙勬礀缂嶅﹪銆佸▎鎾崇煑闁靛/鍕剁础濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩绾惧鏌熼崜褏甯涢柣鎾存礋閺屾洘寰勭€n亞浠撮梺鍏兼た閸ㄤ即鍩㈤幘娲绘晝闁靛繆鏅滅€靛矂姊洪棃娑氬婵☆偅鐟╄棢闁糕剝菧娴滄粓鏌¢崒姘殹闁告梻鍠栭弻鐔肩嵁閸喚浼堥梺杞扮劍閹瑰洭寮幘缁樻櫢闁跨噦鎷�

付款方式留言簿投诉中心网站纠错二维码手机版

客服电话: