我在我自己的函数中想用 send 函数 到底应该如何调用呢?
procedure test(var buf,len:integer);
begin
send(socket,buf,len,flags);
end;
//-------------------------------
procedure main();
var
ary:array of byte;
begin
setlength(ary,2);
ary[0]:=$21;
ary[1]:=$21;
test(ary,2);
end;就是我自己有个数组 想把他发出去 可是发出去的内容总是不对,是不是我传递的方式不对还是怎么的
到底 send函数里的 buf 应该给他赋予什么类型的数据??????
procedure test(var buf,len:integer);
begin
send(socket,buf,len,flags);
end;
//-------------------------------
procedure main();
var
ary:array of byte;
begin
setlength(ary,2);
ary[0]:=$21;
ary[1]:=$21;
test(ary,2);
end;就是我自己有个数组 想把他发出去 可是发出去的内容总是不对,是不是我传递的方式不对还是怎么的
到底 send函数里的 buf 应该给他赋予什么类型的数据??????
解决方案 »
- 在Delphi+mssql里的报表设计器的IIF为空怎么写?
- 開開心過端午節(2)!! (liangpei2008 搶不到SF沒分,哈哈)
- 主、从表问题
- 如何使用Delphi实现对“服务”的重新启动(象Officescan,SQL Server的服务)
- 请问像DELPHI安装程序那样,放入光盘就自动执行程序如何做啊!
- 有谁可以告诉我如何在DELPHI里实现DBGRID中内容的打印,还有计算两个CTIME类型值的相差天数
- 一个超简单问题,不知道有几个大侠能回答上来!能答出的全部给分!明天中午结!
- 高分求救,如何使一个窗体能够接收来自ie的拖拽文本?
- 有关ComboBox选项的问题
- 一个关于指针的问题,请高手指教,急。。。。
- 求助
- 如何读取ini文件中的变量,超市小票格式,由用户自己设置格式?
或许有用
unit testEchoMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Winsock, ExtCtrls, StdCtrls, ComCtrls;
type
TfrmMain = class(TForm)
edtSend: TEdit;
Label1: TLabel;
btnSend: TButton;
edtPort: TEdit;
edtHostIP: TEdit;
Label4: TLabel;
Label3: TLabel;
Bevel1: TBevel;
edtEcho: TEdit;
Label5: TLabel;
btnConnect: TButton;
btnDisConnect: TButton;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnConnectClick(Sender: TObject);
procedure btnDisConnectClick(Sender: TObject);
procedure btnSendClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
socket1:TSocket;
implementation
{$R *.DFM}
procedure TfrmMain.FormCreate(Sender: TObject);
var
WSAData:TWSAData;
begin
//初始化Socket
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
begin
//初始化失败
StatusBar1.SimpleText:='Init Failed';
exit;
end
else
StatusBar1.SimpleText:='Init Success';
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
//释放winsock
WSACleanUP();
end;
procedure TfrmMain.btnConnectClick(Sender: TObject);
var
SocketAddr:TSockAddr;
Re:Integer;
begin
//建立socket
socket1:=socket(AF_INET,SOCK_STREAM,0);
if(socket1=INVALID_SOCKET)then
begin
StatusBar1.SimpleText:='错误:建立socket失败';
exit;
end;
//连接主机
ZeroMemory(@SocketAddr,sizeof(SocketAddr));
SocketAddr.sin_family :=AF_INET;
SocketAddr.sin_addr.s_addr :=inet_addr(Pchar(edtHostIP.Text));
SocketAddr.sin_port:=htons(StrToInt(edtPort.Text));
Re := connect(socket1,SocketAddr,sizeof(SocketAddr));
if(Re<>0)then
begin
StatusBar1.SimpleText:='连接服务器失败';
exit;
end;
//连接主机成功
StatusBar1.SimpleText:='连接主机成功';
end;
procedure TfrmMain.btnDisConnectClick(Sender: TObject);
var
re,err:integer;
info:string;
begin
// 关闭
re:=closesocket(socket1);
// 判断关闭socket结果
if re=SOCKET_ERROR then
begin
err:=WSAGetLastError();
case err of
WSANOTINITIALISED:info:='请先调用WSAStartup';
WSAENETDOWN:info:='网络子系统失败';
WSAENOTSOCK:info:='描述符不是socket对象';
WSAEINPROGRESS:info:='Socket忙';
WSAEINTR:info:='通过WSACancelBlockingCall取消操作';
WSAEWOULDBLOCK:info:='超时值过大';
end;
end
else
Info:='成功关闭socket';
StatusBar1.SimpleText:=info;
end;
procedure TfrmMain.btnSendClick(Sender: TObject);
var
Info:string;
BufSend,BufRecv:pchar;
Re:Integer;
begin
//发送消息
GetMem(BufSend,1024);
ZeroMemory(BufSend,1024);
Info:=edtSend.Text;
StrPCopy(BufSend,Info);
Re:=send(socket1,BufSend^,Length(BufSend),0);
if(Re=SOCKET_ERROR)then
begin
StatusBar1.SimpleText:='发送数据失败';
exit;
end;
//接收消息
GetMem(BufRecv,1024);
ZeroMemory(bufRecv,1024);
re := recv(socket1, BufRecv^, 1024, 0);
Info:=StrPas(bufRecv);
edtEcho.Text:=Info;
//释放pchar变量
FreeMem(BufSend);
FreeMem(BufRecv);
end;
end.
begin
send(socket,buf,len,flags);
end;这样buf就指向一个数据区,用send来发送