用API函数实现简单的网络发送和接收
2012-07-06 08:50
357 查看
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,winsock, StdCtrls, ExtCtrls, DB, ADODB; type TForm1 = class(TForm) edtHostIP: TEdit; edtHostPort: TEdit; btnSend: TButton; lstTags: TListBox; Timer1: TTimer; lblMsg: TLabel; conn: TADOConnection; cmd: TADOCommand; lstSTag: TListBox; lstTagValue: TListBox; lstRecv: TListBox; procedure FormCreate(Sender: TObject); procedure ConnectHost; procedure GetData(myStr:string); procedure msg(myStr:string); procedure FormDestroy(Sender: TObject); procedure btnSendClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SaveToDB; private { Private declarations } public { Public declarations } end; var Form1: TForm1; skt:TSOCKET; addr:TSockAddr; implementation {$R *.dfm} procedure TForm1.ConnectHost; var re:integer; begin skt:=socket(AF_INET,SOCK_STREAM,0); if skt=INVALID_SOCKET then begin msg('create socket failed!'); exit; end else msg('create socket ok'); ZeroMemory(@addr,sizeof(addr)); addr.sin_family:=AF_INET; addr.sin_addr.S_addr:=inet_addr(pchar(edtHostIP.text)); addr.sin_port:=htons(strtoint(edtHostPort.Text)); re:=connect(skt,addr,sizeof(addr)); if re<>0 then begin msg('connect host '+edtHostIp.Text+' failed!'); exit; end else msg('connect host '+edtHostIp.Text+' ok'); end; procedure TForm1.FormCreate(Sender: TObject); var WSAData:TWSAData; begin lstTags.Items.LoadFromFile('lics.txt'); if (WSAStartup(makeword(1,0),WSAData)<>0) then begin msg('Initialize WinSock failed!'); exit; end else msg('Initialize winsock ok'); end; procedure TForm1.msg(myStr: string); begin lblmsg.Caption:=myStr; end; procedure TForm1.FormDestroy(Sender: TObject); begin WSACleanUp; end; procedure TForm1.GetData(myStr: string); var BufSend,BufRecv:pchar; re:integer; begin getMem(BufSend,1024); ZeroMemory(BufSend,1024); myStr:=myStr+#10; StrPCopy(BufSend,myStr); re:=send(skt,BufSend^,length(BufSend),0); if re=SOCKET_ERROR then msg('send error'); GetMem(BufRecv,1024); ZeroMemory(BufRecv,1024); recv(skt,BufRecv^,1024,0); lstTagValue.Items.Add(trim(copy(strpas(BufRecv),14,length(strpas(BufRecv))))); lstRecv.Items.Add(strpas(BufRecv)); FreeMem(BufSend); FreeMem(BufREcv); end; procedure TForm1.btnSendClick(Sender: TObject); var i,iPos:integer; s:string; s1,s2,s3:string; begin msg('receive remote data ......'); connectHost; lstRecv.Clear; lstSTag.Clear; lstTagValue.Clear; for i:=0 to lstTags.Count-1 do begin application.ProcessMessages; s:=lstTags.Items[i]; // crac_bat11.cpv s1:=copy(s,6,length(s)-4); // bat11.cpv iPos:=pos('.',s); s2:='G01 FG 01 '+s1; // G01 FG 01 BAT11.CPV s3:=copy(s,1,iPos-1); // CRAC_BAT11 lstSTag.Items.Add(s3); try GetData(s2); except msg('error reading remote date... you should retry!'); end; end; msg('End at :'+datetimetostr(now())); closesocket(skt); SaveToDB; msg('Save to infoplus end now :'+datetimetostr(now())); end; procedure TForm1.Timer1Timer(Sender: TObject); begin btnSendClick(sender); end; //±£´æÊý¾Ýµ½Êý¾Ý¿âÖÐ procedure TForm1.SaveToDB; var i:integer; sTag,SVal,sSQL:string; begin try conn.Open(); msg('connect database server OK'); except msg('connect database server failed'); exit; end; // lstSQL.Clear; for i:=0 to lstSTag.Count-1 do begin sTag:=lstSTag.Items[i]; sVal:=lstTagValue.Items[i]; if (sVal<>'62') AND (sVal<>'61') then begin sSQL:='update ip_analogdef set ip_input_value='+sVal+' where name=''+sTag+''; //sSQL:='update ip_analogdef set ip_input_value='+sVal+' where name=''+sTag+''; try cmd.CommandText:=sSQL; cmd.Execute; except msg('error:update failed!'); conn.Close; end; end; // lstSQL.Items.Add(sSQL); end; conn.Close; end; end.
相关文章推荐
- 用API函数实现简单的网络发送和接收
- 用API函数实现简单的网络发送和接收
- Java Socket发送与接收HTTP消息简单实现
- C#简单实现自定义消息的发送和接收
- Java Socket发送与接收HTTP消息简单实现
- Java Socket发送与接收HTTP消息简单实现
- AsyncSocket(简单的实现与服务器的发送消息,接收消息)
- Java Socket发送与接收HTTP消息简单实现
- iOS网络篇---使用NSConnection 实现post和get发送和接收(同步和异步模式)
- java Udp实现简单地发送接收信息
- Java Socket发送与接收HTTP消息简单实现
- 简单socket服务(三)实现多客户端向服务器发送数据并保证服务器接收到数据
- Java Socket发送与接收HTTP消息简单实现
- Java Socket发送与接收HTTP消息简单实现
- 数据报实现简单的客户端发送数据,服务端接收数据
- Java网络编程笔记--实现UDP广播发送与接收
- 简单实现udp网络程序发送,接受数据
- 十.TCP与UDP发送和接收数据的简单实现
- UDP和TCP通信机制(实现简单的数据发送与接收)
- iOS网络篇---使用NSSession 实现post和get发送和接收,并实现字典的发送