谁能把下面的C++转换成Delphi 寻C++、Delphi全能高手,200分(之一)请看
http://community.csdn.net/expert/Topicview2.asp?id=3336211int isWriteable(int nFD) { fd_set rfds;
struct timeval tv;
int retval;
FD_ZERO(&rfds);
FD_SET(nFD, &rfds);
tv.tv_sec = 0;
tv.tv_usec = 500; retval = select(nFD+1, NULL, &rfds, NULL, &tv); if (retval) {
return 0;
}
return -1;}HEXPACKET *recvData(int nFD) {
HEXPACKET *pPacket;
const unsigned int MAX_PACKET_SIZE = 1024; pPacket = (HEXPACKET *) malloc( sizeof(HEXPACKET) );
pPacket->data = (unsigned char *) malloc ( MAX_PACKET_SIZE );
pPacket->size = 0; pPacket->size = recv(nFD, pPacket->data, MAX_PACKET_SIZE, 0); /* no data */
if ( pPacket->size == 0 ) {
free(pPacket->data);
return NULL;
} return pPacket;
}int connectSocket(char *pIP, int nPort) {
int nFD = -1;
struct sockaddr_in sock; #ifdef WIN32
WORD wVersionRequested = 0;
WSADATA wsaData; wVersionRequested = MAKEWORD(1, 1);
WSAStartup(wVersionRequested, &wsaData);
#endif nFD = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP); /* An error occured */
if ( nFD == -1 ) {
fprintf(stderr, "ERROR: Creating socket...\n");
} sock.sin_addr.s_addr = inet_addr(pIP);
sock.sin_family = AF_INET;
sock.sin_port = htons(nPort); connect(nFD, (struct sockaddr *) &sock, sizeof(sock)); return nFD;}
http://community.csdn.net/expert/Topicview2.asp?id=3336211int isWriteable(int nFD) { fd_set rfds;
struct timeval tv;
int retval;
FD_ZERO(&rfds);
FD_SET(nFD, &rfds);
tv.tv_sec = 0;
tv.tv_usec = 500; retval = select(nFD+1, NULL, &rfds, NULL, &tv); if (retval) {
return 0;
}
return -1;}HEXPACKET *recvData(int nFD) {
HEXPACKET *pPacket;
const unsigned int MAX_PACKET_SIZE = 1024; pPacket = (HEXPACKET *) malloc( sizeof(HEXPACKET) );
pPacket->data = (unsigned char *) malloc ( MAX_PACKET_SIZE );
pPacket->size = 0; pPacket->size = recv(nFD, pPacket->data, MAX_PACKET_SIZE, 0); /* no data */
if ( pPacket->size == 0 ) {
free(pPacket->data);
return NULL;
} return pPacket;
}int connectSocket(char *pIP, int nPort) {
int nFD = -1;
struct sockaddr_in sock; #ifdef WIN32
WORD wVersionRequested = 0;
WSADATA wsaData; wVersionRequested = MAKEWORD(1, 1);
WSAStartup(wVersionRequested, &wsaData);
#endif nFD = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP); /* An error occured */
if ( nFD == -1 ) {
fprintf(stderr, "ERROR: Creating socket...\n");
} sock.sin_addr.s_addr = inet_addr(pIP);
sock.sin_family = AF_INET;
sock.sin_port = htons(nPort); connect(nFD, (struct sockaddr *) &sock, sizeof(sock)); return nFD;}
pHexPacket=^THexPacket;
THexPacket=packed Record //用不用packed 看 c的pragma pack是否为1
size:uint;
data:PChar;
end;
function isWriteable(nFD:integer):integer;
var
rfds:Tfdset ;
tv:timeval;
retval:integer;
begin
FD_ZERO(rfds);
FD_SET(nFD, rfds);
tv.tv_sec:= 0;
tv.tv_usec:= 500;
retval:= select(nFD+1, nil, @rfds, Nil, @tv);
if (retval>0) then
result:=0
else
result:=-1;
end;
function recvData(nFD:integer):pHexPacket ;
var
pPacket:pHexPacket;
const MAX_PACKET_SIZE = 1024;
begin
new(pPacket);
pPacket^.data := StrAlloc(MAX_PACKET_SIZE );
// pPacket^.size := 0;
pPacket^.size:= recv(nFD, pPacket^.data[0], MAX_PACKET_SIZE, 0); if ( pPacket^.size = 0 ) then
begin
Dispose(pPacket^.data);
Result:=nil;
end else
Result:=pPacket;
end;function connectSocket(pIP:PChar; nPort:integer):integer;
var
nFD:integer;
sock:sockaddr_in;
wVersionRequested:WORD;
wsaData:TWSADATA ;
begin
wVersionRequested:= MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
nFD:= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( nFD = -1 ) then
writeln(2,'ERROR: Creating socket...'); sock.sin_addr.s_addr := inet_addr(pIP);
sock.sin_family := AF_INET;
sock.sin_port := htons(nPort);
connect(nFD, sock, sizeof(sock));
result:=nFD;
end;
function isWriteable(nFD: Integer):Integer;
var
rfds: fd_set;
tv: timeval;
retval: Integer;
begin
Result := -1;
FD_ZERO(@rfds);
FD_SET(nFD, @rfds);
tv.tv_sec = 0;
tv.tv_usec = 500; retval = select(nFD+1, 0, @rfds, 0, @tv);
if retval <> 0 then // CPP 中 if (n) 只要n != 0 if(n) 就为True
Result := 0;
end;
FD_SET(nFD, @rfds);
仔细看看定义吧
http://community.csdn.net/Expert/topic/3337/3337311.xml?temp=.4542658
var
rfds: fd_set;
tv: timeval;
retval: Integer;
begin
FD_ZERO(@rfds);
FD_SET(nFD, @rfds);
tv.tv_sec := 0;
tv.tv_usec := 500; retval = select(nFD + 1, nil, @rfds, nil, @tv);
if retval <> 0 then
Result := 0
else
Result := -1;
end;type
PHEXPACKET = ^HEXPACKET;
function recvData(nFD: Integer): PHEXPACKET;
const
MAX_PACKET_SIZE: Cardinal = 1024;
var
pPacket: PHEXPACKET;
begin
New(pPacket);
GetMem(pPacket.data, MAX_PACKET_SIZE);
pPacket.size := 0; pPacket.size := recv(nFD, pPackt.data, MAX_PACKET_SIZE, 0); // no data
if pPacket.size = 0 then
begin
FreeMem(pPacket.data);
Dispose(pPacket); // added
Result := nil;
end
else
Result := pPacket;
end;type
PSockAddr = ^SockAddr;function connectSocket(pIP: PChar; nPort: Integer): Integer;
var
nFD: Integer;
sock: sockaddr_in;
{#ifdef WIN32}
wVersionRequested: WORD;
wsaData: WSADATA;
{#endif}
begin
nFD := -1;{#ifdef WIN32}
// wVersionRequested := 0; // no use
wVersionRequested = $0101;
WSAStartup(wVersionRequested, @wsaData);
{#endif} nFD := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if nFD = -1 then
begin
Writeln('ERROR: Creating socket...');
end; sock.sin_addr.s_addr := inet_addr(pIP);
sock.sin_family := AF_INET;
sock.sin_port := htons(nPort); connect(nFD, PSockAddr(@sock), SizeOf(sock)); Result := nFD;
end;