//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop#include "Unit1.h"  
#include <stdio.h>
#include "winsock2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------int ReadData(SOCKET client,char* buffer,int iNum)
{
    fd_set          ReadFds;
    struct timeval  timeout;
    unsigned long   lArgp=1;
int             iBytesRead,iRet;    timeout.tv_sec=5;
    timeout.tv_usec=0; iBytesRead=0;
while(iBytesRead<iNum)
{
lArgp=1;
ioctlsocket(client,FIONBIO,&lArgp);
FD_ZERO(&ReadFds);
FD_SET(client,&ReadFds);
iRet=select(client+1,&ReadFds,NULL,NULL,&timeout);
if((iRet==0)||(iRet==SOCKET_ERROR))
{
closesocket(client);
return -1;
}
                if(!FD_ISSET(client,&ReadFds))
                {
                        closesocket(client);
                        return -1;
                }
                lArgp=0;
                ioctlsocket(client,FIONBIO,&lArgp); iRet=recv(client,(char*)&(buffer[iBytesRead]),iNum-iBytesRead,0);
if(iRet==0)
{
closesocket(client);
return 1;
}else if(iRet==SOCKET_ERROR)
{
closesocket(client);
return 2;
}
iBytesRead+=iRet;
}
return 0;
}int SendData(SOCKET client,char* buffer,int iNum)
{
int iIndex,iRet;
iIndex=0;
while(iNum>0)
{
iRet=send(client,&buffer[iIndex],iNum,0);
if(iRet==0)
{
closesocket(client);
return 1;
}else if(iRet==SOCKET_ERROR)
{
closesocket(client);
return 2;
}
iNum-=iRet;
iIndex+=iRet;
}
return 0;
}
int GetServiceSocket(char *szIp,long lPort)
{
WSADATA         wsd;
unsigned long   lArgp=1;
fd_set          WriteFds;
struct timeval  timeout;
int             ret; if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
return -1;
SOCKET client=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(client==SOCKET_ERROR)
return -1;
SOCKADDR_IN sa;
sa.sin_port=htons((unsigned short)lPort);
sa.sin_family=AF_INET;
sa.sin_addr.s_addr=inet_addr(szIp);
ioctlsocket(client,FIONBIO,&lArgp); if(connect(client,(sockaddr*)&sa,sizeof(sa))==SOCKET_ERROR)
{
FD_ZERO(&WriteFds);
                FD_SET(client,&WriteFds);
                timeout.tv_sec=3;
                timeout.tv_usec=0;
                ret=select(client+1,NULL,&WriteFds,NULL,&timeout);
                if((ret==0)||(ret==SOCKET_ERROR))
                {
                        closesocket(client);
                        return -1;
                }
                if(!FD_ISSET(client,&WriteFds))
                {
                        closesocket(client);
                        return -1;
                }
        }
        lArgp=0;
        ioctlsocket(client,FIONBIO,&lArgp);
        return client;
}void __fastcall TForm1::Button1Click(TObject *Sender)
{
   long lClient,lRet,i;
char chStart,chCmd,chEnd;
long lLength,lSeq;
char buf[256],buffer[512];
PACKET packet;
char szIp[20]; memset(szIp,0,sizeof(szIp));
lSeq=20;
chStart=0x01;
chCmd=0x60;
//chCmd=0x62;
chEnd=0x02;
memset(buf,0,sizeof(buf));
/*printf("Enter AccNbr:   (exit to exit program)\n");
scanf("%s",buf);
if(strcmp(buf,"exit")==0)
break; if(strlen(buf)==0)
continue;  */                sprintf(buffer,Edit1->Text.c_str()); lClient=GetServiceSocket("132.231.33.151",4200);
if(lClient<0)
{
ListBox1->Items->Add("Connect 132.231.33.151:4200 fail");
}
ListBox1->Items->Add("connected 132.231.33.151"); if((lRet=SendData(lClient,(char*)&chStart,1))!=0)
{
ListBox1->Items->Add("SendData fail");
}
lLength=11+strlen(buffer);
if((lRet=SendData(lClient,(char*)&lLength,4))!=0)
{
ListBox1->Items->Add("SendData fail");
}
if((lRet=SendData(lClient,(char*)&lSeq,4))!=0)
{
ListBox1->Items->Add("SendData fail");
}
if((lRet=SendData(lClient,(char*)&chCmd,1))!=0)
{
ListBox1->Items->Add("SendData fail");
} if((lRet=SendData(lClient,(char*)buffer,lLength-11))!=0)
{
ListBox1->Items->Add("SendData fail");
}
if((lRet=SendData(lClient,(char*)&chEnd,1))!=0)
{
ListBox1->Items->Add("SendData fail");
} memset(&packet,0,sizeof(packet));
memset(buffer,0,sizeof(buffer));
if((lRet=ReadData(lClient,(char*)&packet.chStart,1))!=0)
{
ListBox1->Items->Add("ReadData fail");
}
if((lRet=ReadData(lClient,(char*)&packet.lLength,4))!=0)
{
ListBox1->Items->Add("ReadData fail");
}
if((lRet=ReadData(lClient,(char*)&packet.lSeq,4))!=0)
{
ListBox1->Items->Add("ReadData fail");
} if((lRet=ReadData(lClient,(char*)&packet.chCmd,1))!=0)
{
ListBox1->Items->Add("ReadData fail");
}
i=packet.lLength-11;
packet.pData=(char*)malloc(i+1);
memset(packet.pData,0,i+1);
if((lRet=ReadData(lClient,packet.pData,i))!=0)
{
ListBox1->Items->Add("ReadData fail");
}
if((lRet=ReadData(lClient,(char*)&packet.chEnd,1))!=0)
{
ListBox1->Items->Add("ReadData fail");
}
closesocket(lClient); ListBox1->Items->Add("packet.start=" + IntToStr(packet.chStart));
ListBox1->Items->Add("packet.length=" + IntToStr(packet.lLength));
ListBox1->Items->Add("packet.seq=" + IntToStr(packet.lSeq));
ListBox1->Items->Add("packet.cmd=" + IntToStr(packet.chCmd));
ListBox1->Items->Add(packet.pData);
ListBox1->Items->Add("packet.end=" + IntToStr(packet.chEnd)); free(packet.pData);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   long lClient,lRet,i;
char chStart,chCmd,chEnd;
long lLength,lSeq;
char buf[256],buffer[512];
PACKET packet;
char szIp[20]; memset(szIp,0,sizeof(szIp));
lSeq=20;
chStart=0x01;
//chCmd=0x60;
chCmd=0x62;
chEnd=0x02;
memset(buf,0,sizeof(buf));
/*printf("Enter AccNbr:   (exit to exit program)\n");
scanf("%s",buf);
if(strcmp(buf,"exit")==0)
break; if(strlen(buf)==0)
continue;  */                sprintf(buffer,Edit2->Text.c_str()); lClient=GetServiceSocket("132.231.33.151",4200);
if(lClient<0)
{
ListBox1->Items->Add("Connect 132.231.33.151:4200 fail");
}
ListBox1->Items->Add("connected 132.231.33.151"); if((lRet=SendData(lClient,(char*)&chStart,1))!=0)
{
ListBox1->Items->Add("SendData fail");
}
lLength=11+strlen(buffer);
if((lRet=SendData(lClient,(char*)&lLength,4))!=0)
{
ListBox1->Items->Add("SendData fail");
}
if((lRet=SendData(lClient,(char*)&lSeq,4))!=0)
{
ListBox1->Items->Add("SendData fail");
}
if((lRet=SendData(lClient,(char*)&chCmd,1))!=0)
{
ListBox1->Items->Add("SendData fail");
} if((lRet=SendData(lClient,(char*)buffer,lLength-11))!=0)
{
ListBox1->Items->Add("SendData fail");
}
if((lRet=SendData(lClient,(char*)&chEnd,1))!=0)
{
ListBox1->Items->Add("SendData fail");
}
}
//---------------------------------------------------------------------------一段C++Builder的程序转化为Delphi如何转,请高手帮忙

解决方案 »

  1.   

    关于Socket的开发,你还不如找点现成的Delphi代码,而且还有现成的Indy控件,比你翻译它的代码省力气。
      

  2.   

    建议先熟悉下 C++ 语法,然后注意一些难点就可以。我想楼主的主要问题应该在于一些指针和地址引用方面 例如:(char*)&packet 这些。过往帖子里面应该有不少这些内容。
      

  3.   

    delphi 好象也可以直接加入C++ builder 的单元
      

  4.   


    嗯,如果这是你找的C++代码的话,建议还是直接找DELPHI的,这方面的代码都很容易找的