Delphi服务端和PHP客户端通过Socket通信
在开始之前看下效果
PHP页面作为客户端发送请求给作为服务端的Delphi应用程序
PHP客户端页面打开如下
Delphi服务端应用程序打开如下
每次PHP页面刷新一下,Delphi的文本框都显示"我上线啦!"做的很粗糙,但是似乎可以作为某种功能的demo
PHP代码如下:
<?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 "<h2>tcp/ip connection </h2>\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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2016-01-20 我是觉得创业永远不晚 但是绝对要谨慎,不是破釜沉舟就一定能赢的(不用拿工资啊 吃喝拉撒在公司报账就好了)
2016-01-20 thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)
2016-01-20 C++编译时函数名修饰约定规则(很具体),MFC提供的宏,extern "C"的作用
2016-01-20 stdcall、cdecl、fastcall、thiscall 、naked call的汇编详解
2015-01-20 修改开源软件以后仍保持更新同步
2013-01-20 D7的System.pas单元的实现部分
2013-01-20 D7的System.pas单元的声明部分