使用TCPServer与TCPClient收发文件--转贴

转载 2005年06月02日 13:20:00

看看DEMO例程,要定义线程CLASS,再用线程发送/接受数据

unit Chatmain;

interface

uses
  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与Client的通信代码

/* 演示tcp的传输的客户端和服务端的互访 需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。 */ /* 客户端: 1:建立socket服务,指定要连接的主机和端口 2:获取sock...
  • liuguangsh
  • liuguangsh
  • 2017年04月25日 16:46
  • 141

Delph7中TcpClient和TcpServer用法分析

最近使用了Delphi7提供的TcpCLient和TcpServer两个VCL控件,发现这两个控件使用非常简单,不像网上不少帖子说的那样难用、性能差。TcpClient和TcpServer没有采用事件...
  • quicmous
  • quicmous
  • 2009年06月12日 10:25
  • 9539

tcpclient tcpserver

#include #include #include #include #include #include #include #include #define PORT 9999 #...
  • u011405813
  • u011405813
  • 2013年10月28日 23:39
  • 643

muduo库的学习10---TcpServer与TcpClient的基本设计---TcpConnection建立与关闭

aa
  • u010087886
  • u010087886
  • 2016年02月29日 11:34
  • 419

C# 之 TcpClient和Socket

OSI七层网络架构   OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端; TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式...
  • qq563129582
  • qq563129582
  • 2016年11月09日 23:43
  • 5513

muduo库的学习8---TcpServer与TcpClient的基本设计---TcpServer

aa
  • u010087886
  • u010087886
  • 2016年02月29日 11:33
  • 206

Qt 实现TcpServer与TcpClient

#include "widget.h" #include "ui_widget.h" const int kPort = 22222; const QString connectflag = "s...
  • AC_huang
  • AC_huang
  • 2014年04月16日 19:41
  • 5574

C#:TcpClient(客户端) and TcpServer(服务端)

服务端:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.W...
  • xiaofengsheng
  • xiaofengsheng
  • 2009年10月08日 23:02
  • 17215

Indy tcp server

unit serverUnit;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F...
  • hzqghost
  • hzqghost
  • 2007年04月08日 00:30
  • 1359

基于TcpListener和TcpClient的Web服务器

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T...
  • CGS_______
  • CGS_______
  • 2017年06月24日 15:35
  • 294
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用TCPServer与TCPClient收发文件--转贴
举报原因:
原因补充:

(最多只允许输入30个字)