核心提示:功能描述:建立与Socket服务器之间的连接,向服务器端发送数据,并接收来自服务器端的数据。并利用Winsock实现不同编程语言之间的通讯。调用顺序:WSAStartup:开始对WS2_32.dll的...
功能描述:
建立与Socket服务器之间的连接,向服务器端发送数据,并接收来自服务器端的数据。并利用Winsock实现不同编程语言之间的通讯。
调用顺序:
WSAStartup:开始对WS2_32.dll的使用
socket:创建一个socket。
connect:连接至服务器。
send:向指定socket发送数据。
recv:从指定的socket接收数据。
WSACleanup:关闭对WS2_32.dll的使用。
声明部分:
zWsaData : TWSAData; //WSADATA数据结构
zSocket : TSOCKET; //定义Socket
zClientService: sockaddr_in; //定义地址信息
procedure CheckRc(str : PChar);
实现部分:
procedure TForm1.Button2Click(Sender: TObject);
varnSendBytes : Integer; //Num of send data nRecvBytes : Integer; //Num of receive data szSendBuf : PChar; //char Data to send
strSendBuf: string; //string data to send
szRecvBuf : array[0..260] of Char; //buf to receive data
nRc : Integer; //Reture code of WSA_fucntion begin
//启动WS2_32.dll
nRc := WSAStartup(MakeWord(2,2),zWSAData);
CheckRc('WSAStartup');
//创建一个Socket
zSocket := socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if zSocket = INVALID_SOCKET then
begin
CheckRc('socket');
end;
//连接至C服务器程序
zClientService.sin_family := AF_INET;
zClientService.sin_addr.S_addr := inet_addr('127.0.0.1');
zClientService.sin_port := htons(27002);
nRc := connect(zSocket,zClientService,SizeOf(zClientService));
if nRc = SOCKET_ERROR then
begin
CheckRc('connect');
WSACleanup();
end;
//send & receive data
szSendBuf := 'Data from delphi Client';
strSendBuf := 'data from delphi';
//发送的数据为string类型
//nSendBytes := send(zSocket,strSendBuf[1],length(strSendBuf),0);
//发送的数据为char
nSendBytes := send(zSocket,szSendBuf[0],length(szSendBuf),0);
self.ListBox1.Items.Add('Num of Send = ' + IntToStr(nSendBytes));
//接收从C服务器发送的数据
nRecvBytes := recv(zSocket,szRecvBuf,260,0);
if nRecvBytes < 0 then
Exit;
if nRecvBytes = -1 then
CheckRc('recv');
//在组件中显示接收到的信息
self.ListBox1.Items.Add('NumOfRecv = ' + IntToStr(nRecvBytes));
self.ListBox1.Items.Add(szRecvBuf);
//Cleanup
WSACleanup(); end;