在线求助!关于GPRS开发问题!!!(200)

  • 主题发起人 主题发起人 vclsaga
  • 开始时间 开始时间
V

vclsaga

Unregistered / Unconfirmed
GUEST, unregistred user!
想了解一下GPRS开发相关知识具体内容如下:1、硬件:支持GPRS功能的数据采集终端、连接到GPRS的服务器2、软件:数据采集终端用C#开发,服务器软件用DELPHI开发3、我所了解的知识是: 。DELPHI在服务器上写个三层数据库系统 。C#写基于TCP/IP的SOCKET程序 。终端上将SQL语句以Byte的方式发送到服务器 。服务器端将Byte解释成SQL语句,然后执行 。服务器将得到的数据再以Byte的形式发送到终端4、以上只是我的个人想法,不知道具体能不能实现,如果不行,请问还有没有别的方法!谢谢!!!
 
may be ,he is a delphier not a c#er ,same to me. :-)
 
TO:草原骏马数据量不会很大,所以宕机的情况应该不会存在!另:C#是针对数据采集器开发的软件,没办法EVC也可以,但不会使[:(]PC上DELPHI开发不需要安装.NET2.0,呵呵!TO:BSENSE我即是DELPHIER也是C#ER,呵呵![:D]另:请问二位仁兄,C#上面连接GPRS的方法是不是和连接局域网是一样的,只不过把IP换成网址??谢谢!!
 
我顶啊!!!
 
那位高人有没有代码供参考一下!谢谢!!!
 
以前在一个硬件设备上用C#开发的测试GPRS的Demo,希望对你有用。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;using System.IO;using System.Xml;using System.Reflection;namespace TestGPRS{ public partial class Form1 : Form { public Form1() { InitializeComponent(); for(int i = 1; i < 9; i++) { CoBComm.Items.Add("COM" + i.ToString()); } CoBComm.SelectedIndex = 3; CoBBaudRate.Items.Add("9600"); CoBBaudRate.Items.Add("115200"); CoBBaudRate.SelectedIndex = 1; CoBCommand.Items.Add("查找模块 AT"); CoBCommand.Items.Add("开始连接 AT+CIPSTART=/"TCP/",/"221.219.0.0/",/"2020/""); CoBCommand.Items.Add("断开连接 AT+CIPSHUT"); CoBCommand.Items.Add("发送数据 AT+CIPSEND/r123456789" + Convert.ToChar(26)); CoBCommand.Items.Add("覆盖网络 AT+CGATT?"); CoBCommand.Items.Add("关闭连接 AT+CIPCLOSE"); CoBCommand.Items.Add("注册网络 AT+CREG?"); CoBCommand.Items.Add("内网地址 AT+CIFSR"); CoBCommand.Items.Add("拨打电话 ATD13704755747;"); CoBCommand.Items.Add("挂断电话 ATH"); CoBCommand.Items.Add("设置模式 AT+CGCLASS=/"B/""); CoBCommand.Items.Add("设置APNA AT+CGDCONT=1,/"IP/",/"CMNET/""); CoBCommand.Items.Add("信号强度 AT+CSQ"); CoBCommand.Items.Add("激活模块 AT+CGACT=1,1"); CoBCommand.Items.Add("注册网络 AT+CGREG?"); CoBCommand.Items.Add("重复命令 A/"); CoBCommand.Items.Add("保存设置 AT&W"); CoBCommand.Items.Add("改波特率 AT+IPR=115200"); CoBCommand.Items.Add("查看版本 ATI"); CoBCommand.SelectedIndex = 0; TeBCommand.Text = "AT"; if(File.Exists(AppPath + "Config.xml")) { LoadConfig(); } } string State { get { return TeBInfor.Text; } set { TeBInfor.Text += value + "/r/n"; TeBInfor.ScrollToCaret(); } } private void BtnOpen_Click(object sender, EventArgs e) { try { SP.Close(); SP.PortName = CoBComm.Text; SP.ReadTimeout = 2000; SP.WriteTimeout = 2000; SP.BaudRate = int.Parse(CoBBaudRate.Text); SP.Open(); State = "成功打开串口 [" + CoBComm.Text + "]"; } catch { State = "不能打开串口 [" + CoBComm.Text + "]"; } } private void BtnSend_Click(object sender, EventArgs e) { if (!SP.IsOpen) { State = "请先打开一个串口"; return; } if(TeBCommand.Text.Trim() == "") return; if (ChBClear.Checked) { TeBInfor.Text = ""; } string StrCommand = TeBCommand.Text.Trim(); if (ChBKey.Checked) { StrCommand += Convert.ToChar(26); } SendCommand(StrCommand); } void SendCommand(string StrCommand) { try { byte[] bSend = new byte[StrCommand.Length + 1]; for (int i = 0; i < StrCommand.Length; i++) { bSend = Convert.ToByte(StrCommand); } bSend[bSend.Length - 1] = Convert.ToByte('/r'); SP.Write(bSend, 0, bSend.Length); State = "命令 " + Encoding.Default.GetString(bSend, 0, bSend.Length) + " 发送完成..."; Thread.Sleep(200); if (SP.BytesToRead == 0) { State = "没有收到返回的信息"; return; } byte[] bData = new byte[256]; State = "收到以下信息"; int iCount = SP.Read(bData, 0, 255); State = Encoding.Default.GetString(bData, 0, iCount); } catch { } return; } private void Form1_Closed(object sender, EventArgs e) { SP.Close(); } private void BtnClear_Click(object sender, EventArgs e) { TeBInfor.Text = ""; } private void CoBCommand_SelectedIndexChanged(object sender, EventArgs e) { string StrData = CoBCommand.Items[CoBCommand.SelectedIndex].ToString(); int iPos = StrData.IndexOf(' '); if (iPos == 0) return; string StrCommand = StrData.Substring(iPos + 1, StrData.Length - iPos - 1); TeBCommand.Text = StrCommand; BtnSend.Focus(); } private void BtnSave_Click(object sender, EventArgs e) { string StrFile = AppPath + "Config.xml"; XmlTextWriter xw = new XmlTextWriter(StrFile, Encoding.UTF8); xw.WriteStartDocument(); xw.WriteStartElement("NewDataSet"); xw.WriteStartElement("Data"); xw.WriteElementString("COM", CoBComm.Text); xw.WriteElementString("BaudRate", CoBBaudRate.Text); xw.WriteElementString("COMMANDCOUNT", CoBCommand.Items.Count.ToString()); for (int i = 0; i < CoBCommand.Items.Count; i++) { if (i == CoBCommand.SelectedIndex) { string StrTemp = CoBCommand.Items.ToString(); int iPos = StrTemp.IndexOf(" "); if(iPos > 0) { StrTemp = StrTemp.Substring(0, iPos + 1); xw.WriteElementString("CoBCommand" + i.ToString(), StrTemp + TeBCommand.Text); } else { xw.WriteElementString("CoBCommand" + i.ToString(), CoBCommand.Items.ToString()); } } else { xw.WriteElementString("CoBCommand" + i.ToString(), CoBCommand.Items.ToString()); } } xw.WriteEndElement(); xw.WriteEndElement(); xw.WriteEndDocument(); xw.Flush(); xw.Close(); LoadConfig(); } private bool LoadConfig() { bool Result = false; try { string StrFile = AppPath + "Config.xml"; DataSet DSTemp = new DataSet(); DSTemp.ReadXml(StrFile); CoBComm.Text = DSTemp.Tables[0].Rows[0]["COM"].ToString(); CoBBaudRate.Text = DSTemp.Tables[0].Rows[0]["BaudRate"].ToString(); int index = CoBCommand.SelectedIndex; CoBCommand.Items.Clear(); int iCount = int.Parse(DSTemp.Tables[0].Rows[0]["COMMANDCOUNT"].ToString()); for (int i = 0; i < iCount; i++) CoBCommand.Items.Add(DSTemp.Tables[0].Rows[0]["CoBCommand" + i.ToString()].ToString()); CoBCommand.SelectedIndex = index; DSTemp.Dispose(); DSTemp = null; Result = true; } catch { } return Result; } public string AppPath { get { if (Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Equals("//")) { return "//"; } else { return Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + "//"; } } } }}
 
我做过2个手机通过GPRS访问服务器小项目手机上用J实现的,服务器上用D实现的。他们直接通过GPRS传输,需要统一编码,我是用的UTF-8的编码。建议,不要让终端写SQL语句,你预先定义好你们所有功能,S处理的时候就提取功能代码进行相应的处理比如:有2个功能,我把功能代码定义为 1和2的integer形式。假如你不自己定义协议,直接用字符串传输,就这样C端发送数据 1/XXX 或者 2/XX那么S端接收到后,遇到定义的功能是1就按照约定对后面的XXX进行相应的处理。如果是2又对他后面的XX进行相应的处理。相当于你C端只发送预先定义的功能码和参数。。这样流量也会小我只是简单说了下我做这样实现的原理。希望对你有所帮助。
 
同意使用实现。注意请求的数据太多,容易造成宕机。都用C#写就行,何必多种语言呢?
 
谢谢,各位达人!!!特别感谢“草原骏马”给我源代码!感谢“asnychen”给我思路!!!再谢谢!!结帖
 
后退
顶部