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
Delphi服务端和PHP客户端通过Socket通信的更多相关文章
- 成功使Linux服务端和Windows客户端建立socket通信
一.准备工作 1.一台装有虚拟机的Windows7操作系统,虚拟机中装的是CentOS6.5版本的Linux 2.Windows7已经装有java环境 二.编码 使用java编写socket通信的服务 ...
- [经验] Java 服务端 和 C# 客户端 实现 Socket 通信
由于项目需要, 我需要通过 Java 开发的服务端对 C# 作为脚本语言开发的 unity 项目实现控制 话不多说, 直接上代码 首先, 我们先来构建服务端的代码, 服务端我们使用 Java 语言 i ...
- [转]C服务端与java客户端的socket通信注意事项
http://blog.csdn.net/gaoxin1076/article/details/7671752 Socket网络通讯开发总结之:Java 与 C进行Socket通讯 注意以下问题: 1 ...
- Delphi XE5通过WebService开发Web服务端和手机客户端
Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices stand-alone vcl applicati ...
- java网络编程TCP传输—流操作—服务端反馈与客户端接收
在读取完流后,服务端会向客户端返回一些数据,告诉客户端,已经写完了. 在这里和”流操作—拿到源后的写入动作“差不多,客户端同样以byte与Buffered两种缓冲读取作为例子,同时,.也是希望大家给补 ...
- ConsoleWebsocketServer服务端和ConsoleWebsocketClient客户端
本文是简述了Websocket的服务端和客户端的实时通讯过程,Websocket的服务端和客户端的具体使用使用了2种Websocket的服务端和2种客户端. 以下代码使用的是Visual Studio ...
- 基于TCP协议套接字,服务端实现接收客户端的连接并发
基于TCP协议套接字,服务端实现接收客户端的连接并发 服务端 import socket from multiprocessing import Process server=socket.socke ...
- 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发
''' 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发 ''' client import socket import time client = socket.socket() clie ...
- 提高服务端性能的几个socket选项
提高服务端性能的几个socket选项 在之前的一篇文章中,作者在配置了SO_REUSEPORT选项之后,使得应用的性能提高了数十倍.现在介绍socket选项中如下几个可以提升服务端性能的选项: SO_ ...
随机推荐
- 刷题总结——射箭(bzoj2732)
题目: Description 沫沫最近在玩一个二维的射箭游戏,如下图 1 所示,这个游戏中的 x 轴在地面,第一象限中有一些竖直线段作为靶子,任意两个靶子都没有公共部分,也不会接触坐标轴.沫沫控制一 ...
- vs2015插件推荐 Productivity Power Tools 2015
vs2015插件推荐 Productivity Power Tools 2015 官网网址:https://marketplace.visualstudio.com/items?itemName=Vi ...
- SPOJ 4060 A game with probability
博弈论+dp+概率 提交链接- 题意不是很好懂 Ai 表示剩 i 个石头. A 先手的获胜概率. Bi 表示剩 i 个石头. B先手的获胜概率. 如果想选,对于 Ai: 有 p 的概率进入 Bi−1 ...
- AtCoder Grand Contest 005F - Many Easy Problems
$n \leq 200000$的树,从树上选$k$个点的一个方案会对$Ans_k$产生大小为“最小的包括这$k$个点的连通块大小”的贡献.求每个$Ans_k$.膜924844033. 看每个点对$An ...
- VMware View 要求操作句柄的状态错误
win10系统安装的VMware-viewclient,版本是
- mysql主从读写分离,分库分表
1.分表 当项目上线后,数据将会几何级的增长,当数据很多的时候,读取性能将会下降,更新表数据的时候也需要更新索引,所以我们需要分表,当数据量再大的时候就需要分库了. a.水平拆分:数据分成多个表 b. ...
- Maven用项目模板生成项目
Archetype插件是Maven生成项目的项目模板,项目模板就是一个框,把文件夹这些定好,然后就可以在上开写具体逻辑等等. 最常用的命令: mvn archetype:generate 这个是生成一 ...
- 用df命令显示磁盘使用量和占用率。
使用“df -k”命令,以k为单位显示磁盘使用量和占用率. root@gsg43:/tmp# df -kFilesystem 1K-blocks Used Available Use% ...
- 【手势交互】4. Kinect for XBox
"You are the Controller",Kinect for Xbox的广告词.明白说明了Kinect体感的交互方式.作为一款集成了诸多先进视觉技术的自然交互设备,Kin ...
- Android 平板中 自己定义键盘(popuwindow) 居于屏幕左下方 仿微信的password输入界面
之前博客中,介绍过使用谷歌提供的键盘的一些api,能够非常好地自己定义键盘,參考我之前的博客链接:android 自己定义键盘 ,这个有一个局限性,仅仅能占满屏幕,无法做到仅仅能占一部分的 ...