php和delphy,Delphi服务端和PHP客户端通过Socket通信

该博客介绍了如何使用PHP作为客户端,通过TCP连接与Delphi应用程序进行交互。PHP代码创建了一个套接字并发送消息'我上线啦!'到Delphi服务端,服务端通过ServerSocket接收并显示消息。这是一个简单的TCP通信DEMO,展示了跨平台的网络通信基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开始之前看下效果

PHP页面作为客户端发送请求给作为服务端的Delphi应用程序

PHP客户端页面打开如下

942ea020aa7f65eacfbd53bb20458f28.png

Delphi服务端应用程序打开如下

7a1a1d18ab4f21a94361da5051eca05e.png

每次PHP页面刷新一下,Delphi的文本框都显示"我上线啦!"做的很粗糙,但是似乎可以作为某种功能的demo

PHP代码如下:

// * Created by PhpStorm.

// * User: Administrator

// * Date: 2017/1/2 0002

// * Time: 下午 3:54

// */

//

////确保在连接客户端时不会超时

//set_time_limit(0);

//

//$ip = ‘192.168.1.110‘;

//$port = 1025;

//

///*

// 9 +-------------------------------

//10 * @socket通信整个过程

//11 +-------------------------------

//12 * @socket_create

//13 * @socket_bind

//14 * @socket_listen

//15 * @socket_accept

//16 * @socket_read

//17 * @socket_write

//18 * @socket_close

//19 +--------------------------------

//20 */

//

// /*---------------- 以下操作都是手册上的 -------------------*/

// if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {

// echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";

//}

//

// if(($ret = socket_bind($sock,$ip,$port)) < 0) {

// echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";

// }

//

// if(($ret = socket_listen($sock,4)) < 0) {

// echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";

//}

//

// $count = 0;

//

// do {

// if (($msgsock = socket_accept($sock)) < 0) {

// echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";

// break;

// } else {

//

// //发到客户端

// $msg ="测试成功!\n";

// socket_write($msgsock, $msg, strlen($msg));

//

// echo "测试成功了啊\n";

// $buf = socket_read($msgsock,8192);

//

//

// $talkback = "收到的信息:$buf\n";

// echo $talkback;

//

// if(++$count >= 5){

// break;

// };

//

//

// }

// //echo $buf;

// socket_close($msgsock);

//

// } while (true);

//

//socket_close($sock);

/***************************服务端*******************************///?><?php /***************************客户端*******************************///error_reporting(E_ALL);

echo"

tcp/ip connection

\n";

$service_port = 1025;

$address = ‘192.168.1.110‘;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if($socket === false) {

echo"socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";

} else{

echo"OK. \n";

}

echo"Attempting to connect to ‘$address‘ on port ‘$service_port‘...";

$result = socket_connect($socket, $address, $service_port);

if($result === false) {

echo"socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";

} else{

echo"OK \n";

}

$in="我上线啦!";

$a=mb_convert_encoding($in,"GBK","UTF-8");

//$in = "HEAD / http/1.1\r\n";

//$in .= "HOST: localhost \r\n";

//$in .= "Connection: close\r\n\r\n";

//$out = "";

echo"sending http head request ...";

socket_write($socket, $a, strlen($a));

echo"OK\n";

echo"Reading response:\n\n";

while($out = socket_read($socket, 8192)) {

echo$out;

}

echo"closeing socket..";

socket_close($socket);

echo"ok .\n\n";

/***************************客户端*******************************/

Delphi

设置:

ServerSocket1的Action为True;

ServerSocket1的Port为1025

代码 如下:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, ScktComp;

type

TForm1 = class(TForm)

ServerSocket1: TServerSocket;

StatusBar1: TStatusBar;

Button1: TButton;

Memo1: TMemo;

Label4: TLabel;

procedure ServerSocket1ClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

procedure ServerSocket1ClientDisconnect(Sender: TObject;

Socket: TCustomWinSocket);

procedure ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

StatusBar1.SimpleText := ‘connect‘;

end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

StatusBar1.SimpleText := ‘disconnect‘;

end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

begin

Memo1.Lines.Add(‘悄悄的对你说‘+ Socket.ReceiveText);

end;

end.

http://blog.csdn.net/s371795639/article/details/53980181

原文:http://www.cnblogs.com/findumars/p/6323494.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值