本人要做一个与单片机网口通讯的上位机界面,请问要用到什么控件? RT,TCP/IP通讯和UDP通讯都行,我现在还搞不清 winsock socketserver socketclient TCPserver TCPlient在delhi7下有什么区别~最好有控件的说明啦 新手,谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 协议都是一样的,就看你的单片机接受什么样的协议,接收什么样的数据,使用indy组件就可以 哦 听说D7的INDY代替了socketserver socketclient 请问有没有例子呢?下面一个例子里是SERVER的代码,有几句看不懂,知识不够全面,API就大概看了看,红色的可以注释一下么....还有本例子中没有看到DLL和可视控件,它调用的WinSock库是哪里来着的,已经封装成类么?不解unit ServerMain;interfaceuses Windows, Messages, WinSock, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ImgList, ToolWin, XPMan, Menus, ExtCtrls;const WM_WORK1_ACCEPT = WM_USER + 12; WM_WORK1_READ = WM_USER + 13;type TForm1 = class(TForm) StatusBar1: TStatusBar; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ImageList1: TImageList; XPManifest1: TXPManifest; PopupMenu1: TPopupMenu; N8: TMenuItem; Panel1: TPanel; ListBox1: TListBox; Memo1: TMemo; Splitter1: TSplitter; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure ToolButton3Click(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure N8Click(Sender: TObject); private { Private declarations } procedure InitSocket; procedure OnWork1Accept(Var message: TMessage); message WM_WORK1_ACCEPT; procedure OnWork1Read(Var message: TMessage); message WM_WORK1_READ; public { Public declarations } end; TCarCache = Record Pzh: String[10]; Cz: String[20]; Zs: Integer; end;var Form1: TForm1; Server_Socket : Integer; //服务器Socket号码 Conn_Socket : Integer; //连接后Socket号码implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin //初始化 InitSocket;end;procedure TForm1.FormDestroy(Sender: TObject);begin //释放WInSOck WSACleanup();end;procedure TForm1.OnWork1Accept(var message: TMessage);Var Client_Addr: TSockAddr; ClientLen: Integer;begin FillChar(Client_Addr,Sizeof(Client_Addr),0); ClientLen := Sizeof(Client_Addr); Conn_Socket := Accept(Server_Socket,@Client_Addr,@ClientLen); StatusBar1.Panels[1].Text := '已连接'; ToolButton1.Enabled := true; ToolButton3.Enabled := true; //读取/关闭 事件 WSAAsyncSelect(Conn_Socket, Form1.Handle, WM_WORK1_READ, FD_READ or FD_CLOSE);end; procedure TForm1.OnWork1Read(var message: TMessage);Var Buff: String[100]; RET: Integer;begin CASE WSAGETSELECTEVENT(message.lParam) OF FD_READ: begin Ret := Recv(Conn_Socket,Buff,Sizeof(Buff),0); if Ret = SOCKET_ERROR then begin showmessage('Read Error!'); end else if Ret > 0 then //接收 begin ListBox1.Items.Add(Buff); //返回 Send(Conn_Socket,Buff,Sizeof(Buff),0); end; end; FD_CLOSE: begin StatusBar1.Panels[1].Text := '已断开'; ToolButton1.Enabled := false; ToolButton3.Enabled := false; end; end;end;procedure TForm1.ToolButton3Click(Sender: TObject);var Buff: String[100]; i: Integer;begin for i := 0 to Memo1.Lines.Count - 1 do begin Buff := Memo1.Lines[i]; Send(Conn_socket,Buff,sizeof(Buff),0); end; Memo1.Clear;end;procedure TForm1.ToolButton1Click(Sender: TObject);begin CloseSocket(Conn_socket); StatusBar1.Panels[1].Text := '已断开'; ToolButton1.Enabled := false; ToolButton3.Enabled := false;end;procedure TForm1.N8Click(Sender: TObject);begin ListBox1.Clear;end;procedure TForm1.InitSocket;Var XL_WSADATA:TWSADATA; Sa: SockAddr_In; RET:Integer;begin //初始化WinSock库 RET:=WSASTARTUP(MakeWord(2,2),XL_WSADATA); IF RET=0 THEN begin //建立Sock Server_Socket:=Socket(PF_INET,SOCK_STREAM,0); IF Server_SOCKET=INVALID_SOCKET THEN begin Application.MessageBox('SOCKET创建失败','注意',mb_ok) end; //邦定 Sa.sin_family := PF_INET; Sa.sin_port := Htons(8080); Sa.sin_addr.s_addr := INADDR_ANY; RET := Bind(Server_Socket,Sa,sizeof(Sa)); IF RET = SOCKET_ERROR then begin Application.MessageBox('SOCKET邦定失败!','注意',mb_ok) end; //监听 Ret := Listen(Server_Socket,1); if Ret <> 0 then begin Application.MessageBox('监听失败!','错误信息',MB_OK); Exit; end; //连接事件 WSAAsyncSelect(Server_Socket,Form1.Handle,WM_WORK1_ACCEPT,FD_ACCEPT); end;end;end. 没有显示颜色,我就剪下来贴上了1. const WM_WORK1_ACCEPT = WM_USER + 12; WM_WORK1_READ = WM_USER + 13;2. procedure OnWork1Accept(Var message: TMessage); message WM_WORK1_ACCEPT; procedure OnWork1Read(Var message: TMessage); message WM_WORK1_READ;3.FillChar(Client_Addr,Sizeof(Client_Addr),0); unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdTCPConnection, IdTCPClient, IdBaseComponent, IdComponent, IdTCPServer;type TForm1 = class(TForm) IdTCPServer1: TIdTCPServer; IdTCPClient1: TIdTCPClient; Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure IdTCPServer1Execute(AThread: TIdPeerThread); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin self.IdTCPClient1.Host:='127.0.0.1'; self.IdTCPClient1.Port:=9999; try self.IdTCPClient1.Connect(5000); self.IdTCPClient1.WriteLn('hello world'); self.IdTCPClient1.Disconnect; except on e:exception do memo1.Lines.Add(e.Message); end;end;procedure TForm1.FormCreate(Sender: TObject);begin self.IdTCPServer1.DefaultPort:=9999; self.IdTCPServer1.Active:=true;end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);var cmd: string;begin with AThread.Connection do begin cmd:= ReadLn(); memo1.Lines.Add(cmd); end;end;end. 用delphi自带得socket简单就可以实现 都是 TCP/IP 协议的封装,看喜好使用 你的单片机的通信程序做好了吗?我也有类似的问题想请教!希望得到帮助!邮箱:[email protected] 有个很少的C++源码急着需要翻译成其它源码,版主、高手请进。 怎样设计界面? 下面是一段读取数据库的代码,读出来的结果根我想的不一样,这是为什么呢??? sos!!!!急急急!!!!!!!!!!!!!!!!!!!!!!! 如何可以检测到程序已经连到某个IP的数据库呢? 看过《深入Delphi网络编程》请进!在线等侯! 密码到底怎么做才能保密? 怎样才能知道DataSet当前指针位于数据库的第几条数据? dll调用出错!!!!!!! 求一个程序代码 如何得到c:\ewise.exe这个程序的版本号 怎样查看对某个表的操作语句
Windows, Messages, WinSock, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ImgList, ToolWin, XPMan, Menus, ExtCtrls;
const
WM_WORK1_ACCEPT = WM_USER + 12;
WM_WORK1_READ = WM_USER + 13;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ImageList1: TImageList;
XPManifest1: TXPManifest;
PopupMenu1: TPopupMenu;
N8: TMenuItem;
Panel1: TPanel;
ListBox1: TListBox;
Memo1: TMemo;
Splitter1: TSplitter;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure N8Click(Sender: TObject);
private
{ Private declarations }
procedure InitSocket;
procedure OnWork1Accept(Var message: TMessage); message WM_WORK1_ACCEPT;
procedure OnWork1Read(Var message: TMessage); message WM_WORK1_READ; public
{ Public declarations }
end; TCarCache = Record
Pzh: String[10];
Cz: String[20];
Zs: Integer;
end;
var
Form1: TForm1;
Server_Socket : Integer; //服务器Socket号码
Conn_Socket : Integer; //连接后Socket号码implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
//初始化
InitSocket;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
//释放WInSOck
WSACleanup();
end;procedure TForm1.OnWork1Accept(var message: TMessage);
Var
Client_Addr: TSockAddr;
ClientLen: Integer;
begin
FillChar(Client_Addr,Sizeof(Client_Addr),0); ClientLen := Sizeof(Client_Addr);
Conn_Socket := Accept(Server_Socket,@Client_Addr,@ClientLen);
StatusBar1.Panels[1].Text := '已连接';
ToolButton1.Enabled := true;
ToolButton3.Enabled := true;
//读取/关闭 事件
WSAAsyncSelect(Conn_Socket, Form1.Handle, WM_WORK1_READ, FD_READ or FD_CLOSE);
end; procedure TForm1.OnWork1Read(var message: TMessage);
Var
Buff: String[100];
RET: Integer;
begin
CASE WSAGETSELECTEVENT(message.lParam) OF
FD_READ:
begin
Ret := Recv(Conn_Socket,Buff,Sizeof(Buff),0);
if Ret = SOCKET_ERROR then
begin
showmessage('Read Error!');
end
else if Ret > 0 then //接收
begin
ListBox1.Items.Add(Buff);
//返回
Send(Conn_Socket,Buff,Sizeof(Buff),0);
end;
end;
FD_CLOSE:
begin
StatusBar1.Panels[1].Text := '已断开';
ToolButton1.Enabled := false;
ToolButton3.Enabled := false;
end;
end;
end;procedure TForm1.ToolButton3Click(Sender: TObject);
var
Buff: String[100];
i: Integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do
begin
Buff := Memo1.Lines[i];
Send(Conn_socket,Buff,sizeof(Buff),0);
end;
Memo1.Clear;
end;procedure TForm1.ToolButton1Click(Sender: TObject);
begin
CloseSocket(Conn_socket);
StatusBar1.Panels[1].Text := '已断开';
ToolButton1.Enabled := false;
ToolButton3.Enabled := false;
end;procedure TForm1.N8Click(Sender: TObject);
begin
ListBox1.Clear;
end;procedure TForm1.InitSocket;
Var
XL_WSADATA:TWSADATA;
Sa: SockAddr_In;
RET:Integer;
begin
//初始化WinSock库
RET:=WSASTARTUP(MakeWord(2,2),XL_WSADATA);
IF RET=0 THEN
begin
//建立Sock
Server_Socket:=Socket(PF_INET,SOCK_STREAM,0);
IF Server_SOCKET=INVALID_SOCKET THEN
begin
Application.MessageBox('SOCKET创建失败','注意',mb_ok)
end;
//邦定
Sa.sin_family := PF_INET;
Sa.sin_port := Htons(8080);
Sa.sin_addr.s_addr := INADDR_ANY;
RET := Bind(Server_Socket,Sa,sizeof(Sa));
IF RET = SOCKET_ERROR then
begin
Application.MessageBox('SOCKET邦定失败!','注意',mb_ok)
end;
//监听
Ret := Listen(Server_Socket,1);
if Ret <> 0 then
begin
Application.MessageBox('监听失败!','错误信息',MB_OK);
Exit;
end;
//连接事件
WSAAsyncSelect(Server_Socket,Form1.Handle,WM_WORK1_ACCEPT,FD_ACCEPT);
end;
end;end.
1. const
WM_WORK1_ACCEPT = WM_USER + 12;
WM_WORK1_READ = WM_USER + 13;
2.
procedure OnWork1Accept(Var message: TMessage); message WM_WORK1_ACCEPT;
procedure OnWork1Read(Var message: TMessage); message WM_WORK1_READ;3.FillChar(Client_Addr,Sizeof(Client_Addr),0);
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdTCPConnection, IdTCPClient, IdBaseComponent,
IdComponent, IdTCPServer;type
TForm1 = class(TForm)
IdTCPServer1: TIdTCPServer;
IdTCPClient1: TIdTCPClient;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
self.IdTCPClient1.Host:='127.0.0.1';
self.IdTCPClient1.Port:=9999;
try
self.IdTCPClient1.Connect(5000);
self.IdTCPClient1.WriteLn('hello world');
self.IdTCPClient1.Disconnect;
except
on e:exception do
memo1.Lines.Add(e.Message);
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
self.IdTCPServer1.DefaultPort:=9999;
self.IdTCPServer1.Active:=true;
end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
cmd: string;
begin
with AThread.Connection do
begin
cmd:= ReadLn();
memo1.Lines.Add(cmd);
end;
end;end.
邮箱:[email protected]