CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

我公司招聘软件工程师(济南)

楼主nitxht(人在江湖)2006-03-04 10:16:06 在 Delphi / VCL组件开发及应用 提问

要求:  
  (1)在济南工作。  
  (2)从事软件开发3年以上,有通讯,网络开发经验。  
  (3)开发工具delphi或者c++  
  待遇:  
  (1)月薪(3000)+项目奖金+年底分红。  
  有意合作者请留电话和个人简历到信箱:nitxht@163.com  
  招聘截止日期:2006年3月31日  
  问题点数:0、回复次数:2Top

1 楼2353939(▄︻┳═一 菜鸟)回复于 2006-03-04 15:32:48 得分 0

(3)开发工具delphi或者c++  
  这一句不太对头Top

2 楼2353939(▄︻┳═一 菜鸟)回复于 2006-03-04 15:39:01 得分 0

MODEM编程及开发通信软件的技术与技巧  
   
  作者:王渤         文章来源:国防大学图书馆技术室         点击数:         更新时间:2004-11-24    
  龚建伟评论:本文对MODEM编程结合MSComm控件作了较为详细的说明,想了解MODEM编程的读者可以看看,文章后附实例程序。  
   
   
  【提要】随着计算机应用领域的不断扩展,计算机之间的远程通信用得也越来越广泛,计算机间的远程通信所使用的通信软件,在市面上可以买到,但是通用的通信软件虽然能发送和接收文件,在许方情况下这些通信软件并不能满足实际工作的需要。本文就这一技术进行了探讨,介绍了有关的知识和技术,并由实例分步骤说明如何进行通信软件的开发。    
   
  一、前言    
    本文将以VB5.0所带的通信控件MSCOMM进行通信软件的开发,它有约30个属性和事件(可以从联机帮助中找到其使用资料)。本文简述它的主要属性及事件,并归类整理。    
  利用串行端口与调制解调器进行连接时,对于用MSCOMM控件编制通信软件来说,只需了解以下五根线的代号及作用。以下五根线的高电平/低电平状态分别对应MScomm控件的相应属性的True/False值。    
    (1)DTR线:PC发往MODEM,表示PC机是否已准备好。    
    (2)RTS线:PC发往MODEM,表示PC机是否允许modem发回数据.    
    (3)DSR线:MODEM发往PC,表示MODEM是否已做好操作准备    
    (4)CTS线:MODEM发往PC,表示MODEM是否允许发送数据    
  (5)CD线:MODEM发往PC,表示MOEDM已经与呼叫的远方MODEM处于连结状态    
   
  二、MSCOMM控件的属性    
  用1,2,...表示串口COM1,COM2....    
  设置或返回联接MODEM的串口的编号    
  Settings    
  例用"19200,N,8,1"表示传输速率为19200bps,没有奇偶校验位,8位数据位,1位停止位。    
  设置或返回通信参数。    
  Handshaking    
  0没有握手协议,不考虑流量控制。    
  1XON/XOFF,即在数据流中嵌入控制苻来进行流控。    
  2RTS/CTS,既由信号线RTS/CTS自动进行流量控制(常用)。    
  3两者皆可。    
  设置或返回硬件握手协议,指的是PC机MODEM之间为了控制流速而约定的内部协议。    
  PortOpen    
  True/False可以打开/关闭端口。    
  打开或关闭端口。    
  OutBufferSize    
  传输缓冲区的字节数,如选1024。    
  设置或返回传输缓冲区大小。    
  OutPut    
  Variant型变量。    
  向传输缓冲区写数据流。    
  传输文本数据时,应将String型数据放入Variant变量,传输二进制数据(即按字节)时,应将Byte型数组数据放入Variant变量    
  InBufferSize    
  接收缓冲区的字节数,如选1024。    
  设置或返回接收缓冲区大小。    
  InputMode    
  0用Input属性接收文本型数据。    
  1用Input属性接收二进制数据。    
  设置或返回接收数据的数据类型。    
  InBufferCount    
  Integer型    
  返回接收缓冲区中已传到但还未取走的字符个数。    
  Input    
  当InputMode属性值为0(文本模式)时,变量中含String型数据。    
  当InputMode属性值为1(二进制模式)时,变量中含Byte型数组数据。    
  将接收缓冲区中收到的数据读入变量。    
  DTREnabled    
  RTSEnabled    
  DSRHolding    
  CTSHolding    
  CDHolding    
  均取值TRUE/FALSE    
  用于读取或控制pc机与modem之间的交互状态。需运用好。例如,应在读取到DSRHolding属性值为TRUE时再向MODEM发出命令。应当在载波检测到以后(CDHolding属性为TRUE)时再向MODEM发送数据。    
   
  三、MSCOMM控件的触发事件    
    MSCOMM控件只使用一个事件OnComm,用属性CommEvent的十七个值来区分不同的触发时机。主要有以下几个:    
    (1)CommEvent=1时:传输缓冲区中的字符个数已少于Sthreshold(可设置的属性值)个。    
    (2)CommEvent=2时:接收缓冲区中收到hreshold(可设置的属性值)个个字符,利用此事件可编写接收数据的过程。    
    (3)CommEvent=3时:CTS线发生变化。    
    (4)CommEvent=4时:DSR线发生变化。    
    (5)CommEvent=5时:CD线发生变化。    
    (6)CommEvent=6时:检测到振铃信号。    
    另外十种情况是通信错误时产生,即错误代码。    
   
  四、通信软件程序实现    
    1、首先是通信参数设置,主要就是可以设置端口号,波特率,数据位,停止位,奇偶校验位及设置硬件握手协议,这些设置较为简单。    
  2、向MODEM发出DTR(已准备好)信号,如下例程:    
  If   MSComm1.PORTOPEN   Then    
  MSComm1.DTREnable=True    
  Else    
  MSComm1.DTREnable=False    
  EndIf    
  3、打开时向MODEM发出一些命令来设置参数,其中S0=n(n>=1)自动应答.n为响铃次数;E0/E1关闭/打开命令字符回应;Q0/Q1modem返回/不返回结果码;M0/M1关闭/打开MODEM扬声器,例程如下:    
  If   MSComm1.PORTOPEN   Then    
  Do   While   not   MSComm1.CTSHolding   :   loop    
  Outstring="ATS0=1E1Q0M0"+Chr(13)    
  MSComm1.Output=Outstring    
  End   if    
  4、进行拨号设计,需向MODEM发出ATDT命令,如下语句:    
  MSComm1.Output="ATDT"+Trim(“电话号码”)+Chr(13)    
  5、拨号以后发送数据文件,程序要循环等待并随时判定是否接通。如果MODEM向PC的回应字符串中含有"Connect"或CDHolding属性值变为True(检测出载波),则表示已与远方MODEM连机了,此时可以传输数据。    
  程序设计发送及接收程序时,需要以下定义:    
  S_FILENAME   =   "NAME"   +   Chr(5)   +   Chr(13)   +   Chr(10)    
  S_FILELEN   =   "LENTH"   +   Chr(5)   +   Chr(13)   +   Chr(10)    
  S_FILESEND   =   "BEGIN"   +   Chr(5)   +   Chr(13)   +   Chr(10)    
   
  Sub   OpenFileToSend()   '打开一个欲发送的文件    
  HSend   =   FreeFile    
  Open   SENDFN   For   Binary   As   hSend   'SENDFN中含有由用户选定的要传送的文件名。    
  LF&=LOF(hSend)   '文件长度为LF&    
  '开始发送文件名,文件长度,文件开始等信息字符串。    
  Dim   Data   as   Vrait    
  Data   =   S_FILENAME    
  MSComm1.Output=Data   '发出"FILENAME"文件名字串的提示信息    
  Data   =   SENDFN   +Chr(13)+Chr(10)    
  MSComm1.Output=Data   '发出文件名    
  Data   =   S_FILELEN    
  MSComm1.Output=DATA   '发出"FILELEN"提示字串    
  Data   =   Trim(Str(LF&))+Chr(13)+Chr(10)    
  MSComm1.Output=Data   '发出文件大小    
  Data   =   S_FILESTAR    
  MSComm1.Output=Data   '发出"FILESTART"提示信息,表示下面文件开始。    
   
  Dim   Sendarr()   as   byte   '定义字节型数组    
  Sum=0   '记录累计发送的字节数    
  BSIZE=MSComm1.OutBufferSize   '每次发送的块大小    
  ReDim   Sendarr(1   To   BSIZE)   '重新定义读取缓冲    
  Do   While   Sum<LF&   '循环发送    
  If   LF&-Loc(hSend)<BSIZE   Then    
  BSIZE=LF&-Loc(hSend)    
  ReDim   Sendarr(1   To   BSIZE)    
  End   If    
  Get   hSend   ,,   SENDARR   '从文件取字节放入字节数组    
  Sendvar=Sendarr   '转放到Variant型变量    
  '当CTS线及CD线为高电平时才可发送,否则需等待。    
  T=Timer+60    
  L:    
  If   MSComm1.CTSHolding   And   MSComm1.CDHolding   Then    
  MSComm1.Output=Sendvar   '发送    
  Sum   =   Sum   +   BSIZE'累加计数    
  Else    
  If   Timer   <   T   Then    
  Go   To   L   '循环等待    
  Else    
  Go   To   CLOSEFILE   '等待时间超过60秒则退出    
  End   If    
  End   If    
  '等待系统处理完    
  Do    
  RET   =   DoEvents()    
  Loop   Until   MSComm1.OutBufferCount   =   0    
  Loop   '循环发送完毕。    
   
  6、接收MODEM送回的信息和数据文件,该过程是编写mscomm1控件的OnCOMM事件的处理程序来完成。为了接收文本类型的握手信号,通常使InputMode属性为文本模式。当发现接收到的字符串中有"FILESTAR"+Chr(5)+Chr(13)+Chr(10),则将InputMode属性改为二进制模式。当文件内容接收完(由接收的字节数判断)再将InputMode属性改为文本模式。例程如下:    
  Private   Static   Sub   MSComm1_OnComm()    
  Select   Case   MSComm1.CommEvent    
  Case   comEvReceive   '接收缓冲区收到Rthreshold个字符时触发    
  Dim   DATA   As   Variant    
  Dim   N   As   Long    
  Dim   SJARR()   As   Byte    
  N=MSComm1.InBufferCount   '接收缓冲区字符总数    
  If   MSComm1.InputMode=0   Then'文本模式时,将收到的数据放到字符串变量。    
  MSComm1.InputLen=0    
  DATA   =   Space(N)    
  DATA   =   MSComm1.Input    
  Else   '二进制模式时,将收到的数据放到字节数组。    
  ReDim   S   JARR(1ToN)    
  DATA=ARR    
  MSComm1.InputLen=N    
  DATA=MSComm1.Input    
  End   If    
  '其它case情况略    
  End   Select    
  End   Sub    
   
  7、关于接收到的数据的处理例程:    
  Public   Static   Sub   HandleData   (Disp   As   Control,N   As   Long,DATA   As   Variant)    
  '参数:Disp(文本框,用于显示接受数据)    
  'N为本次接收到的字节数    
  'DATA(接收到的数据.Variant型)    
  If   not   mscomm1.InputMode=0   Then   '接收的是字符串    
  Go   To   L2    
  End   If    
  Disp.SelStart   =   Len   (   Disp.Text)    
  Disp.SelLength   =   0    
  Disp.SelText   =   DATA   '显示字符数据    
  If   InStr(1,Disp.Text,S_FILESTAR,0)=0   Then   '若没有开始标志就结束此过程    
  ExitSub    
  EndIf    
  V_FILENAME   =   InStr(1,Disp.Text,S_FILENAME,0)   '找文件名及文件长度    
  V_FILELEN   =   InStr(1,Disp.Text,S_FILELEN,0)    
  FN   =   Mid(Disp.Text,V_FILENAME+11,(V_FILELEN-V_FILENAME-13))    
  HJS   =   FreeFile'打开接收文件    
  JSFN   =   Pathc+"\SJFILE\S"+Trim(Str(NO))+"_"+FN    
   
  Open   JSFN   For   Binary   As   HJS    
  V_FILENAME   =   InStr(1,Disp.Text,S_FILENAME,0)    
  V_FILELEN   =   InStr(1,Disp.Text,S_FILELEN,0)    
  FN   =   Mid(Disp.Text,V_FILENAME+11,(V_FILELEN-1)-(V_FILENAME+11))    
  FL   =   Mid(Disp.Text,V_FILELEN+11,V_FILESTAR-(V_FILELEN+10))    
  SENDLEN   =   Val(FL)   '应收总字节数SENDLEN    
   
  ReDim   JSARR(0   To   N-1)    
  JSARR=DATA   '将字节流放入字节型数组    
  Puth   JS   ,   ,   JSARR   '   写入已打开的接收文件    
  JSLEN=JSLEN+N   '本次已累计收到的字节数    
  Close   HJS    
  End   Sub  
  Top

相关问题

  • [华为] ==== 招聘软件工程师 ====
  • [华为] ==== 招聘软件工程师 ====
  • 招聘:软件工程师 地点:上海
  • 托普招聘5000软件工程师,内情大曝光
  • 在北京招聘高级软件工程师
  • 招聘.NET(C#)软件工程师上海
  • 招聘 .NET Java 软件工程师 (1-3年工作经验)
  • 我公司出的软件工程师笔试题,大家看看,呵。。。
  • 深圳,什么公司招VC软件工程师能在八千以上?
  • 救命啊!我同学去一家公司面试软件工程师被一道VC++题难着了!

关键词

  • c++
  • 属性
  • 数据
  • 通信
  • 控件
  • 文件
  • 字符
  • pc
  • 二进制
  • 文件名

得分解答快速导航

  • 帖主:nitxht

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo