[python&php 网络编程]完整的socket服务端客户端

php和python请求socket服务器 一直对socket这个概念比较模糊,正好最近学习python时有socket这一章节。稍微研究了一下。我的解释不照搬概念,用我自己的理解稍微解释一下什么是socket。socket又称“套接字”,是一种通信机制。可以理解为http协议。但是socket本身不是一种协议。他用于不同应用程序间的通信。 本文使用python简单搭建一个socket服务器。通过python、php两种方式进行通信。大体上 阅读详情

1.python服务端

import socket
import argparse

host = 'localhost'
data_payload = 2048
backlog = 5 


def echo_server(port):
    """ A simple echo server """
    # Create a TCP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # Enable reuse address/port 
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    # Bind the socket to the port
    server_address = (host, port)
    print "Starting up echo server  on %s port %s" % server_address
    sock.bind(server_address)
    # Listen to clients, backlog argument specifies the max no. of queued connections
    sock.listen(backlog) 
    while True: 
        print "Waiting to receive message from client"
        client, address = sock.accept() 
        data = client.recv(data_payload) 
        if data:
            print "Data: %s" %data
            client.send(data)
            print "sent %s bytes back to %s" % (data, address)
        # end connection
        client.close() 
   
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Socket Server Example')
    parser.add_argument('--port', action="store", dest="port", type=int, required=True)
    given_args = parser.parse_args() 
    port = given_args.port
    echo_server(port)

2.python客户端

import socket
import argparse

host = 'localhost'

def echo_client(port):
    """ A simple echo client """
    # Create a TCP/IP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # Connect the socket to the server
    server_address = (host, port)
    print "Connecting to %s port %s" % server_address
    sock.connect(server_address)
    
    # Send data
    try:
        # Send data
        message = "Test message. This will be echoed"
        print "Sending %s" % message
        sock.sendall(message)
        # Look for the response
        amount_received = 0
        amount_expected = len(message)
        while amount_received < amount_expected:
            data = sock.recv(16)
            amount_received += len(data)
            print "Received: %s" % data
    except socket.errno, e:
        print "Socket error: %s" %str(e)
    except Exception, e:
        print "Other exception: %s" %str(e)
    finally:
        print "Closing connection to the server"
        sock.close()
    
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Socket Server Example')
    parser.add_argument('--port', action="store", dest="port", type=int, required=True)
    given_args = parser.parse_args() 
    port = given_args.port
    echo_client(port)

启动服务端,由于用了pasrearg模块 因此需要 在启动命令后面加上 --port = 8888 来指定某个端口,然后再运行客户端脚本,发现在两边都会有信息输出,客户端发送完后关闭socket,服务端则一直监听8888端口。


3.php服务端

<?php
$host = "127.0.0.1";
$port = 8888;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
printf("Starting up echo server  on %s port %s\n", $host, $port);
$result = socket_bind($socket, $host, $port);
print("Waiting to receive message from client\n");
$result = socket_listen($socket, 3);
for (; ;) {
    $spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
    $input = socket_read($spawn, 1024) or die("Could not read input\n");
    $input = trim($input);
    echo "Client Message : " . $input . "\n";
    $output = strrev($input) . "\n";
    socket_write($spawn, $output, strlen($output)) or die("Could not write output\n");
    socket_close($spawn);
}

4.php客户端

<?php
$host = "127.0.0.1";
$port = 8888;

printf("Connecting to %s port %s\n", $host, $port);
$message = "Test message. This will be echoed";
print("Sending " . $message);
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
$result = socket_read($socket, 1024) or die("Could not read server response\n");
echo "\nReceived :" . $result;
socket_close($socket);

php码出来的代码风格没python那么优雅(也可能是我偷懒) 但都差不多,码socket不会比写业务逻辑高级,都是码代码,php也用cli方式运行,用cgi方式跑又不设置超时时间的话 会超时的.

5.UDP php服务端

<?php
 
//Reduce errors
error_reporting(~E_WARNING);
 
//Create a UDP socket
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
     
    die("Couldn't create socket: [$errorcode] $errormsg \n");
}
 
echo "Socket created \n";
 
// Bind the source address
if( !socket_bind($sock, "0.0.0.0" , 9999) )
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
     
    die("Could not bind socket : [$errorcode] $errormsg \n");
}
 
echo "Socket bind OK \n";
 
//Do some communication, this loop can handle multiple clients
while(1)
{
    echo "Waiting for data ... \n";
     
    //Receive some data
    $r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
    echo "$remote_ip : $remote_port -- " . $buf;
     
    //Send back the data to the client
    socket_sendto($sock, "OK " . $buf , 100 , 0 , $remote_ip , $remote_port);
}
 
socket_close($sock);

6.UDP php客户端

<?php
 
/*
    Simple php udp socket client
*/
 
//Reduce errors
error_reporting(~E_WARNING);
 
$server = '127.0.0.1';
$port = 9999;
 
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
     
    die("Couldn't create socket: [$errorcode] $errormsg \n");
}
 
echo "Socket created \n";
 
//Communication loop
while(1)
{
    //Take some input to send
    echo 'Enter a message to send : ';
    $input = fgets(STDIN);
     
    //Send the message to the server
    if( ! socket_sendto($sock, $input , strlen($input) , 0 , $server , $port))
    {
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);
         
        die("Could not send data: [$errorcode] $errormsg \n");
    }
         
    //Now receive reply from server and print it
    if(socket_recv ( $sock , $reply , 2045 , MSG_WAITALL ) === FALSE)
    {
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);
         
        die("Could not receive data: [$errorcode] $errormsg \n");
    }
     
    echo "Reply : $reply";
}

php官方文档在udp socket方面没有完整的例子,这里贴一个备用吧 :)

转载请标注原文地址:http://blog.youkuaiyun.com/ddjohn/article/details/50041763

socketIO-client, python的socket.io 客户端库.zip socketIO-client, python的socket.io 客户端库 socketio客户端这里是一个 socket.io 客户端库,用于 python 。 你可以使用它为你的socket.io 服务器编写测试代码。请注意,这个版本实现了 socket.io 协议 1.x,它不是向后兼容的。 如果 立即下载

相关推荐

php实现与python进行socket通信的方法示例

主要介绍了php实现与python进行socket通信的方法,结合实例形式分析了php使用自定义类发送socket请求数据及Python接收socket数据并处理请求等相关操作技巧,需要的朋友可以参考下

php和python通信_PHP和python之间的socket通信示例

程序的开发需要我们不断的进行学习,然后才能把学到的知识运用到我们需要的项目中,让这个项目变得活灵活现的,本文为大家带来了PHP和python之间的socket通信示例,相信对大家学习这方面的知识有一点的帮助。设计目的通过前端页面发起请求交给php,php创建socket请求交给Python脚本,然后执行完毕之后,返回给前端。index.htmltest关闭服务service / main.php$...

weixin_39976081的博客 484

软考软件评测师备考避坑指南:过来人告诉你这5个章节最容易丢分(附2024最新考纲解析)

本文为软考软件评测师考生提供备考避坑指南,深度解析5个高频失分章节,包括标准化与信息化基础、中间件技术、软件测试模型、白盒测试覆盖准则和性能测试指标。文章结合2024最新考纲,分享实战技巧和记忆口诀,帮助考生精准打击失分重灾区,提升备考效率。

weixin_29223603的博客 467

python Socket通信传输结果存在‘b

之前尝试编写了python下socket通信程序,发现服务端与客户端之间传输的信息不仅仅包含返回内容,排头还存在一个b,我一直以为是socket通信附带的表示,其实解决方法很简单。其实就是接受的信息为byte型,需要对数据进行解码,也就是在数据之后加上.decode(‘utf-8’)即可消除排头’b的标识。...

m0_43398209的博客 1227

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建(详细文档)

m0_52369979的博客 730

01|无代码开发 | 如何使用Zion实现导航网站制作

以上就是我制作导航网站的心得,分享给大家,作为一个小白想要独立搭建一个网站还是比较困难的,而在Zion不仅可以用可视化的方法进行搭建,甚至还可以一键发布,不用考虑服务器域名啥的问题,真是太方便了。

2301_76262110的博客 1390

php和python通信_LAPP: 通过socket通信,使得PHP和PYTHON可以互通,借鉴了ppython

#简介许多人在纠结WEB快速开发究竟是采用PHP,还是采用Python,二者同样是脚本语言,但特点鲜明:PHP: Web专用开发利器,有10多年的经验积累,但其他领域基本不涉及,扩展性不强,企业应用少。Python: 近期的明星语言,面向对象、简单高效、可扩展性强,但Web开发积累少,成熟度低。ppython开源项目既是结合使用PHP和Python两种语言,取其所长、补其所短,面向企业WEB领域的...

weixin_35639680的博客 360

采用超级电容设计的UPS不间断电源,用于掉电数据保存,可续航10-60秒

关键词:树莓派 CM4 UPS 不间断电源 掉电保存 超级电容 SuperCap 充电 升压 续航 10F 法拉电容 Mcuzone 野芯科技 概述:我们经常会遇到系统意外掉电的情况,对于一些可靠性要求很高的工业现场设备或者运行过程中有重要数据需要保存的平台就需要UPS电源了。常规的UPS采用后备锂电池设计,具备无缝切换、续航时间长、稳定可靠等特点,但同时也有价格过高、体积过大的缺点。对于不少仅需在检测到系统掉电后对数据进行保存即可的应用而言,这些标准的UPS电源就不太合适,为此我...

6605

PHP与Python间的Socket通信(Threading)

(部分信息来自《python参考手册》) 一说明 Socket是类似于文件的对象,使程序能够接受传入连接,进行传出连接,发送和接收数据。在两台机器进行通信之前,它们都必须创建socket对象。 常见的协议及端口(这些端口是由操作系统管理的) ftp-Data:20...

368

uniapp - 热更新提示:WGT安装包中manifest.json文件不存在 | unexpected EOF!报错详细解决,完美搞定WGT安装包中WWW目录下manifest.json不存在问题

uniapp,安卓android,苹果ios,热更新,热更新code:-1202报错,,WGT热更新报错,uniapp热更新wgt出现报错manifest.json文件不存,uniapp安卓苹果软件热更新时出现错误unexpected EOF!如何解决,怎么解决热更新wgt报错,app新版本下载安装报错WGT安装包中manifest.json文件不存在,WGT安装包中WWW目录下manifest.json不存在,uniapp热更新报错安装失败[-1201]:WGT/WGTU文件格式错误,uniapp-wgt

✅ 精选推荐文章 1万+

YOLO+OpenClaw缺陷检测智能体 | 低代码工业质检自动化方案 | 含YOLO模型训练/智能体集成/任务全流程,支持离线日报/预警/趋势分析,解决实时性瓶颈问题(下篇)

某PCB板制造商需要对生产线上的PCB板进行缺陷检测,主要检测划痕、凹坑、污渍和裂纹等缺陷。原有人工检测方式效率仅为200件/小时,漏检率达5%,且检测人员长期工作易疲劳。

qq_36130719的博客 206

[python&php 网络编程]把socket改成阻塞或非阻塞模式

1.python写法 import socket def test_socket_modes(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setblocking(1) s.settimeout(0.5) s.bind(("127.0.0.1", 0)) socket_ad

YIP 3604

Python爬虫实战:实时爬取东方财富网股票行情

东方财富网实时行情(价格、涨跌幅、成交量等)K线图、分时图、技术指标市盈率、换手率、总市值等指标相比某些收费API,东方财富网页端接口不需要登录、免费、响应快、封装清晰,适合爬虫实践。东方财富网股票数据接口分析实时数据抓取与字段提取数据结构化处理自动化批量抓取多线程加速采集数据可视化展示支持存储为CSV/Excel/数据库。

2201_76125261的博客 1万+

php与python通信_php实现与python进行socket通信的方法示例

本文实例讲述了php实现与python进行socket通信的方法。分享给大家供大家参考,具体如下:设计目的通过前端页面发起请求交给php,php创建socket请求交给Python脚本,然后执行完毕之后,返回给前端。index.htmltestg_xmlHttpReq = new XMLHttpRequest();function onReplyCallback(){if(g_xmlHttpReq...

weixin_39735247的博客 204

美的集团-数据挖掘工程师面试分享

美的集团-数据挖掘工程师面试分享

510

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

PHP调用Python和PHP向Python发送数据

一、python文件位于项目中,非远程外部。 1、定义一个python测试文件 test.py #!/usr/bin/env python #-*- coding: UTF-8 -*- print "这是一个测试" 2、定义一个url去访问一个php方法(我直接在laravel框架里测试的) $output = exec("python /home/vagrant/code/php...

小乔流水仁家的博客 7247

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

php之与python进行socket通信

## 设计目的 通过前端页面发起请求交给php,php创建socket请求交给python脚本,然后执行完毕之后,返回给前端。 ## index.html test g_xmlHttpReq = new XMLHttpRequest(); function onReplyCallback() { if(g_xmlHttpReq.readyState==4 && g

2562

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

php连接 python 套接字 socket通信

php连接 python 套接字 socket通信 php 请求数据给python python返回数据给php php 连接 python套接字的方法 $ip = "127.0.0.1"; $port = "5678"; $sw = new stockConnector($ip,$port); $aa = ["status"=>true,"model"=>"12312","func"...

huangkang1995的博客 841

python做socket服务端,php做客户端

python server:#-*-coding=utf-8-*-from socket import *#''代表服务器为localhostmyHost = '127.0.0.1'#在一个非保留端口号上进行监听myPort = 2011#设置一个TCP socket对象sockobj = socket(AF_INET, SOCK_STREAM)#绑定它至端口号sockobj.bind((myH...

weixin_34101784的博客 148

php与python通信_如何实现php与python进行socket通信的方法示例

这篇文章主要介绍了php实现与python进行socket通信的方法,结合实例形式分析了php使用自定义类发送socket请求数据及Python接收socket数据并处理请求等相关操作技巧,需要的朋友可以参考下本文实例讲述了php实现与python进行socket通信的方法。分享给大家供大家参考,具体如下:设计目的通过前端页面发起请求交给php,php创建socket请求交给Python脚本,然后...

weixin_39675289的博客 293

python与php 长连接超时,[python&php 网络编程]设定并获取socket超时时间

1.python写法import socketdef test_socket_timeout():s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print "Default socket timeout: %s" %s.gettimeout()s.settimeout(100)print "Current socket timeout: ...

weixin_31491059的博客 211

Python-socket的简单使用

套接字(socket)是计算机网络数据结构,在任何类型的通信开始之前,网络应用程序必须创建套接字,可以将其比作电话的插孔,没有它将无法进行通信常用的地址家族 AF_UNIX:基于文件,实现同一主机不同进程之间的通信 AF_INET:基于网络,适用于IPv4 AF_INET6:基于网络,使用于IPv6 常见的连接类型 SOCK_STREAM:即TCP/IP。面向连接的套接字,通信之前必须建立可靠的连接

奔跑的豆子的专栏 3771

[Python]socket使用

python socket可以实现socket通信功能,还可以与php, js等程序进行socket通信,达到在网页中嵌入Python程序的目的。 Python中使用socket模块完成socket通信功能,其提供底层的套接字访问接口。 项目中,Python通过socket与前端js通信,读入数据,处理后传回。

ice110956的专栏 6237

python 使用socket通信

服务端的创建: # coding=utf-8 import socket # 创建socket对象 s = socket.socket() # 将socket绑定到本机IP地址和端口 s.bind(('172.30.213.238', 3000)) # 服务端开始监听来自客户端的连接 s.listen() while True: c, addr = s.accept() pr...

https://www.cnblogs.com/zpchcbd/ 297

《Python网络编程》Part1 Socket、IPv4和简单的客户端/服务器编程

《Python网络编程》Part1 打印设备名和IPv4地址 1、获取主机名和IP地址 .py: import socket def print_machine_info(): host_name = socket.gethostname() ip_address= socket.gethostbyname(host_name) print "Host name: %s" % hos

梁的博客 2001

php与python通信_PHP与Python间Socket通信代码片段

PHP与Python间Socket通信代码片段,这不是完整的代码,而且代码还需要更多的改进。服务器端Python代码#coding:utf-8'''Socket 服务器端常见的协议及端口(这些端口是由操作系统管理的)ftp-Data:20,ftp-Control:21SSH:22,Telnet:23SMTP:25,HTTP:80POP3:110IMAP:143HTTPS:443'''import ...

weixin_39573781的博客 119
上一篇: [python&php 网络编程]从网络时间服务器获取并打印当前时间
下一篇: python发送http multipart报文并和php交互
ddjohn
博客等级 码龄17年 36粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值