一个使用PHP实现socket客户端信息提交并接收返回信息的demo

最近有个项目要实现socket通信,网上找了很多资料,基本都是使用JS实现socket数据的提交,因为项目有些特殊,需要使用php来实现,使用JS实现客户端功能网上代码比较多多,就不做介绍。这里介绍一个php-websocket类。

1. php websocket 类

<?php
/*----------------------------------------------------------------------------*\
  Websocket client
  By Paragi 2013, Simon Riget MIT license.
  This is a demonstration of a websocket clinet.
  If you find flaws in it, please let me know at simon.riget (at) gmail
  Websockets use hybi10 frame encoding:
        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-------+-+-------------+-------------------------------+
       |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
       |I|S|S|S|  (4)  |A|     (7)     |             (16/63)           |
       |N|V|V|V|       |S|             |   (if payload len==126/127)   |
       | |1|2|3|       |K|             |                               |
       +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
       |     Extended payload length continued, if payload len == 127  |
       + - - - - - - - - - - - - - - - +-------------------------------+
       |                               |Masking-key, if MASK set to 1  |
       +-------------------------------+-------------------------------+
       | Masking-key (continued)       |          Payload Data         |
       +-------------------------------- - - - - - - - - - - - - - - - +
       :                     Payload Data continued ...                :
       + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
       |                     Payload Data continued ...                |
       +---------------------------------------------------------------+
  See: https://tools.ietf.org/rfc/rfc6455.txt
  or:  http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10#section-4.2
\*----------------------------------------------------------------------------*/

/*================================================&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
客户端以被动接收数据的方式使用 UDP Socket 时,需要使用`recvfrom()`函数来接收数据。以下是一个简单的示例代码,展示了如何在 C++ 中编写一个 UDP Socket 客户端: ```cpp #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 8888 #define BUFFER_SIZE 1024 int main() { int sockfd; char buffer[BUFFER_SIZE]; struct sockaddr_in serverAddress, clientAddress; socklen_t clientLength; // 创建UDP Socket sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { std::cerr << "Failed to create socket." << std::endl; return 1; } // 设置服务器地址和端口 serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(PORT); serverAddress.sin_addr.s_addr = INADDR_ANY; // 绑定客户端地址和端口 if (bind(sockfd, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) { std::cerr << "Failed to bind." << std::endl; return 1; } // 接收数据 while (true) { memset(buffer, 0, BUFFER_SIZE); // 阻塞接收数据 ssize_t dataSize = recvfrom(sockfd, buffer, BUFFER_SIZE - 1, 0, (struct sockaddr*)&clientAddress, &clientLength); if (dataSize < 0) { std::cerr << "Failed to receive data." << std::endl; break; } std::cout << "Received data: " << buffer << std::endl; // 如果接收到 "quit" 则退出循环 if (strcmp(buffer, "quit") == 0) { std::cout << "Exiting..." << std::endl; break; } } // 关闭Socket close(sockfd); return 0; } ``` 这个示例代码中,使用了`socket()`函数创建了一个 UDP Socket,并使用`bind()`函数将其与客户端地址和端口绑定。然后通过循环使用`recvfrom()`函数阻塞接收数据,并将接收到的数据打印出来。如果接收到 "quit" 则退出循环。最后使用`close()`函数关闭 Socket。 请注意,上述代码仅为示例,仍有待改进和优化,包括错误处理、异常情况处理等。在实际使用时,请根据需求进行适当修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值