DELPHI7 里面TCPCLIENT/TCPSERVER控件的使用问题? 请问 DELPHI7里面 TCPCLIENT/TCPSERVER控件,在建立连接后如何发消息,用哪个函数,什么格式? 谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TCPCLIENT/TCPSERVER是D7新出的控件,D6有吗? 呵呵好分数自己要,我自己找到答案拉~~看看DEMO例程,要定义线程CLASS,再用线程发送/接受数据unit Chatmain;interfaceuses Classes, QControls, QStdCtrls, QExtCtrls, QButtons, QForms, Sockets;type TForm1 = class(TForm) memRecv: TMemo; Panel1: TPanel; memSend: TMemo; Panel2: TPanel; btnSend: TButton; Panel3: TPanel; Label1: TLabel; edtRemoteHost: TEdit; Label2: TLabel; edtRemotePort: TEdit; Label3: TLabel; edtLocalPort: TEdit; btnActivateServer: TButton; TcpClient1: TTcpClient; TcpServer1: TTcpServer; procedure btnSendClick(Sender: TObject); procedure TcpServer1Accept(sender: TObject; ClientSocket: TCustomIpClient); procedure btnActivateServerClick(Sender: TObject); private { Private declarations } public { Public declarations } end; // you must create your own thread to synch // writing to a gui component TClientDataThread = class(TThread) private public ListBuffer :TStringList; TargetList :TStrings; procedure synchAddDataToControl; constructor Create(CreateSuspended: Boolean); procedure Execute; override; procedure Terminate; end;var Form1: TForm1; //DataThread: TClientDataThread;implementation{$R *.xfm}//------------- TClientDataThread impl -----------------------------------------constructor TClientDataThread.Create(CreateSuspended: Boolean);begin inherited Create(CreateSuspended); FreeOnTerminate := true; ListBuffer := TStringList.Create;end;procedure TClientDataThread.Terminate;begin ListBuffer.Free; inherited;end;procedure TClientDataThread.Execute;begin Synchronize(synchAddDataToControl);end;procedure TClientDataThread.synchAddDataToControl;begin TargetList.AddStrings(ListBuffer);end;//------------- end TClientDataThread impl -------------------------------------procedure TForm1.btnActivateServerClick(Sender: TObject);begin TcpServer1.LocalPort := edtLocalPort.Text; TcpServer1.Active := True;end; procedure TForm1.btnSendClick(Sender: TObject);var I: Integer;begin TcpClient1.RemoteHost := edtRemoteHost.Text; TcpClient1.RemotePort := edtRemotePort.Text; try if TcpClient1.Connect then for I := 0 to memSend.Lines.Count - 1 do TcpClient1.Sendln(memSend.Lines[I]); finally TcpClient1.Disconnect; end;end;procedure TForm1.TcpServer1Accept(sender: TObject; ClientSocket: TCustomIpClient);var s: string; DataThread: TClientDataThread;begin // create thread DataThread:= TClientDataThread.Create(true); // set the TagetList to the gui list that you // with to synch with. DataThread.TargetList := memRecv.lines; // Load the Threads ListBuffer DataThread.ListBuffer.Add('*** Connection Accepted ***'); DataThread.ListBuffer.Add('Remote Host: ' + ClientSocket.LookupHostName(ClientSocket.RemoteHost) + ' (' + ClientSocket.RemoteHost + ')'); DataThread.ListBuffer.Add('===== Begin message ====='); s := ClientSocket.Receiveln; while s <> '' do begin DataThread.ListBuffer.Add(s); s := ClientSocket.Receiveln; end; DataThread.ListBuffer.Add('===== End of message ====='); // Call Resume which will execute and synch the // ListBuffer with the TargetList DataThread.Resume;end;end. 自己打自己嘴巴~~~函数 TCPSERVER.RECVICELN还是用不了,3天都找不到答案,好笨呕。最后还是用SERVERSOCKET解决了。 文件夹同步怎么实现? 这个奇怪的delphi6的小问题,怎么回事?? 关于image拖动和改变大小的问题 请教:如何实现这种截图? 各位大侠帮个忙,有分送啦. 我用ADO连接一些ACCESS数据库的时候,怎么经常出现:“from子句语法错误”,非常奇怪。。(来者都有分) 为了弄毕业设计,开始学Delphi,大家介绍点精验吧,我学过VB、C不知转学它难吗 请问如何查出SQL表格的行数 谁会用delphi编传奇2引擎程序m2server? 两个整型数相除,例如:15/4 如何得到一个整数,用哪个函数? 求教SQL语句! 关于数据库成批修改的问题
Classes, QControls, QStdCtrls, QExtCtrls, QButtons, QForms, Sockets;
type
TForm1 = class(TForm)
memRecv: TMemo;
Panel1: TPanel;
memSend: TMemo;
Panel2: TPanel;
btnSend: TButton;
Panel3: TPanel;
Label1: TLabel;
edtRemoteHost: TEdit;
Label2: TLabel;
edtRemotePort: TEdit;
Label3: TLabel;
edtLocalPort: TEdit;
btnActivateServer: TButton;
TcpClient1: TTcpClient;
TcpServer1: TTcpServer;
procedure btnSendClick(Sender: TObject);
procedure TcpServer1Accept(sender: TObject;
ClientSocket: TCustomIpClient);
procedure btnActivateServerClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; // you must create your own thread to synch
// writing to a gui component
TClientDataThread = class(TThread)
private
public
ListBuffer :TStringList;
TargetList :TStrings;
procedure synchAddDataToControl;
constructor Create(CreateSuspended: Boolean);
procedure Execute; override;
procedure Terminate;
end;var
Form1: TForm1;
//DataThread: TClientDataThread;implementation{$R *.xfm}//------------- TClientDataThread impl -----------------------------------------
constructor TClientDataThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FreeOnTerminate := true;
ListBuffer := TStringList.Create;
end;procedure TClientDataThread.Terminate;
begin
ListBuffer.Free;
inherited;
end;procedure TClientDataThread.Execute;
begin
Synchronize(synchAddDataToControl);
end;procedure TClientDataThread.synchAddDataToControl;
begin
TargetList.AddStrings(ListBuffer);
end;
//------------- end TClientDataThread impl -------------------------------------
procedure TForm1.btnActivateServerClick(Sender: TObject);
begin
TcpServer1.LocalPort := edtLocalPort.Text;
TcpServer1.Active := True;
end; procedure TForm1.btnSendClick(Sender: TObject);
var
I: Integer;
begin
TcpClient1.RemoteHost := edtRemoteHost.Text;
TcpClient1.RemotePort := edtRemotePort.Text;
try
if TcpClient1.Connect then
for I := 0 to memSend.Lines.Count - 1 do
TcpClient1.Sendln(memSend.Lines[I]);
finally
TcpClient1.Disconnect;
end;
end;procedure TForm1.TcpServer1Accept(sender: TObject;
ClientSocket: TCustomIpClient);
var
s: string;
DataThread: TClientDataThread;
begin
// create thread
DataThread:= TClientDataThread.Create(true);
// set the TagetList to the gui list that you
// with to synch with.
DataThread.TargetList := memRecv.lines; // Load the Threads ListBuffer
DataThread.ListBuffer.Add('*** Connection Accepted ***');
DataThread.ListBuffer.Add('Remote Host: ' + ClientSocket.LookupHostName(ClientSocket.RemoteHost) +
' (' + ClientSocket.RemoteHost + ')');
DataThread.ListBuffer.Add('===== Begin message =====');
s := ClientSocket.Receiveln;
while s <> '' do
begin
DataThread.ListBuffer.Add(s);
s := ClientSocket.Receiveln;
end;
DataThread.ListBuffer.Add('===== End of message ====='); // Call Resume which will execute and synch the
// ListBuffer with the TargetList
DataThread.Resume;end;end.
最后还是用SERVERSOCKET解决了。