简洁的UDP协议通讯 | PHP&&C | socket

前言
今天在公司玩了一下UDP协议通讯,因为公司对服务器的安全性要求很高,没有 http协议,要通信那就来tcpudp,好勒,那就来UDP,其实公司也没有做到高安全性,不说其他的,公司却做了傻逼一样的限制,针对开发者。

第一:几乎没有网络
第二:我的电脑安装了公司的一个xx软件,只能上内网服务器,外网?拜拜,怪我太年轻无知。
第三:傻逼式开发,直接在服务器编码。果然有毒,说好的svn、git协作与维护管理呢。哎


UDP传输原理
UDP传输不需要连接, 发送端只需要把自己的消息打包好(UDP报文), 然后从电脑上发到因特网即可, 不会有任何的确认帧来反馈给你.


等着,代码见!(加班困了,晚安)

PHP-Server

Run Server

➜  php server.php
udp server had started...
the port is 9998...

PHP-Client

/**
 * @param string $sendMsg
 * @param string $ip
 * @param string $port
 * @return bool|string
 */
function udpRequest($sendMsg = '', $ip = '127.0.0.1', $port = '9998') {
    $handle = stream_socket_client("udp://{$ip}:{$port}", $errno, $errstr);
    !$handle ? die("ERROR: {$errno} - {$errstr}\n") : null;
    fwrite($handle, $sendMsg . "\n");
    $result = fread($handle, 1024);
    fclose($handle);
    return $result;
}

$result = udpRequest(json_encode(array("code" => 4, "name" => "alicfeng")));
echo $result;

Run Client

➜  php client.php

C-Client

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/*UDP服务器地址*/
#define LOG_SERV_ADDR "127.0.0.1"
/*udp服务器端口*/
#define LOG_SERV_PORT 9998
/*环境模式*/
#define LOG_ENV_DEV 1

/**
 * 往udp仍数据
 * @param message
 */
void send_msg_udp(char *message) {
    if(LOG_ENV_DEV!=1){
        return;
    }
    int sockfd;
    struct sockaddr_in servaddr;
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    /* 初始化udp信息 */
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(LOG_SERV_PORT);
    if (inet_pton(AF_INET, LOG_SERV_ADDR, &servaddr.sin_addr) <= 0) {
        return;
    }
    /* 连接UDP服务器 */
    if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1) {
        perror("connect udp error");
        return;
    }
    /*往UDP写数据*/
    write(sockfd, message, strlen(message));
}

int main(int argc, char **argv) {
    send_msg_udp("alicFeng在扔数据...");
    return 0;
}

Run Client

gcc -o client client.c && ./client

****价值源于技术,贡献源于分享****

你可能感兴趣的:(简洁的UDP协议通讯 | PHP&&C | socket)