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_ ...
随机推荐
- spring之Autowire
当使用spring为一个对象的属性注入时,通常使用xml文件的property元素和ref属性,但是我们也可以使用spring中的autowire进行注入 使用方法如下 <bean id=&qu ...
- 【极角排序+双指针线性扫】2017多校训练七 HDU 6127 Hard challenge
acm.hdu.edu.cn/showproblem.php?pid=6127 [题意] 给定平面直角坐标系中的n个点,这n个点每个点都有一个点权 这n个点两两可以连乘一条线段,定义每条线段的权值为线 ...
- java之线程池面试题
面试官:线程池有哪些?分别的作用是什么? 常用的线程池有: newSingleThreadExecutor newFixedThreadExecutor newCacheThreadExecutor ...
- Infinite monkey theorem(hdu 3689)
题意:问随机生成一个长度为m(m<=1000)长度的字符串,出现某个子串s的概率是多少. /* KMP+DP 设f[i][j]表示A生成到第i位,此时B串匹配到第j位的概率. 转移方程为f[i+ ...
- CodeForces 731C Socks
http://codeforces.com/problemset/problem/731/C 并查集+贪心 将要求颜色相同的袜子序号放入一个集合中 贪心:然后统计这个集合中出现次数最多但颜色 可以得到 ...
- 【Codeforces Round #506 (Div. 3) 】
A:https://www.cnblogs.com/myx12345/p/9844334.html B:https://www.cnblogs.com/myx12345/p/9844368.html ...
- 用GDB远程调试android native程序
上次写了几个native程序,想着如何调试,经过一阵子搜索和测试,终于完成了.有几个关键点: 1 gdb和gdbserver 因为这两个需要配套,建议使用同一个ndk下面的gdb和gdbserver ...
- Mac OS X 下安装python的MySQLdb模块
参考资料: mac os x下python安装MySQLdb模块 http://www.codeif.com/post/1073/ MAC OSX使用Python安装模块有关问题 http:// ...
- codevs——1570 去看电影
1570 去看电影 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 农夫约翰带着他的一些奶牛去看电影.而他的 ...
- LCD1602和LCD12864
1602 字符型(字符型的模组) 只能显示数字与字符,不可以显示汉字 12864 点阵型(图形型的模组) 可根据需求任意显示字符 数字 汉字 图形 1602 为16字乘2行12864 为128列点阵乘 ...