• 231CH579M学习开发以太网例程TCP服务器(项目应用封装,和电脑直连测试)


    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnCH579M" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

    测试

    1.默认设置如下

    网关地址:192.168.1.1

    子网掩码:255.255.255.0

    电脑地址:192.168.1.100

    开发板地址:192.168.1.200

    2.可在单片机程序net_init文件中修改配置

    2.修改电脑配置

    关闭电脑防火墙

    打开电脑的网络配置,配置下电脑

     

    3.使用一根网线把电脑网口和开发板网口连接

    5.编译下载这节的程序到开发板

    提示:开发板TCP监听的端口号为:6666

    6.打开电脑TCP调试助手(安装下面这个,可以测试多路TCP客户端)

    7.创建连接

    IP地址填写开发板的IP地址,我的是192.168.1.200

    开发板TCP服务器监听的端口号是 6666

     

     

    8.开发板会打印连接的客户端信息

    7.电脑调试助手发送数据给开发板(TCP服务器)

    开发板(TCP服务器)接收到什么数据就回复什么数据, 同时会把接收的信息使用串口输出,

    8.再创建个客户端去连接(通信测试自己去测试哈)

    程序说明

    1,程序是封装好了的,我说明一下使用

    2,建一个TCP服务器变量

    net_tcp_server_struct net_tcp_server;

    3,把net_tcp_server_data 函数放到网络事件处理函数里面

    4,设置下服务器监听的端口号,并创建服务器

     

    下面的回调函数的写法就是这样子写,里面的处理程序后面我会说明(我提供的例子是支持多路连接的,所以程序有点多)

    6,客户端连接之后就会进这个里面

    因为实际项目可能需要在别的地方给客户端发送消息,所以记录下这个socket

    下面写成if判断是判断哪个变量没有使用, 就使用哪个变量去记录

    如果只有一路客户端可以直接

    7,接收客户端的消息

    在接收里面也可以知道客户端的ip地址和端口号

    复制代码
        printf("ip address:%d,%d,%d,%d,%ld\r\n",
        SocketInf[socket_client_value->socket_id].IPAddr[0], 
        SocketInf[socket_client_value->socket_id].IPAddr[1], 
        SocketInf[socket_client_value->socket_id].IPAddr[2], 
        SocketInf[socket_client_value->socket_id].IPAddr[3],
        SocketInf[socket_client_value->socket_id].DesPort
        );
    复制代码

    8,发送消息给客户端

    在接收里面直接返回的话是下面这样子写

    在别的地方发送数据给客户端就需要用到先前那个变量了

    注意事项

    1,如果是多路客户端连接,实际上 socket1,socket2,socket3,socket4变量的记录有可能是变化的.

    假设有3个客户端, 192.168.1.90  ;  192.168.1.101 ; 192.168.1.110

    一开始192.168.1.90 先连接,   192.168.1.101 后连接,

    现在socket1记录了192.168.1.90;  socket2记录了 192.168.1.101

    如果现在192.168.1.101断开了, 然后  192.168.1.110 连接了, 

    那么现在 socket2 就会记录 192.168.1.110

     

    如果用户确实需要有针对性的发送数据的时候,可以根据客户端的ip地址或者端口号发送数据

    发送数据的时候判断下客户端的ip和端口号

    假设给ip地址是192.168.1.93 端口号 4001的客户端发数据

    2,整个socket的总个数是默认是4个

    注意啦, TCP服务器本身就占用一个, 然后一个客户端连接占用一个, 所以默认最多支持3路客户端

    如果需要多个客户端可以调大下面的值

  • 相关阅读:
    NodeJS笔记:处理非utf8编码
    SQL Server存储过程中的异常处理
    "岛主" 同学给我出的算法题
    学 Win32 汇编[18]: 关于压栈(PUSH)与出栈(POP) 之二
    如何在数据表中存取图片 回复 "三足乌" 的问题
    学 Win32 汇编[19]: 查看二进制等相关函数
    如何删除动态数组的指定元素 回复 "Splendour" 的部分问题
    学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一
    学 Win32 汇编[22] 逻辑运算指令: AND、OR、XOR、NOT、TEST
    学 Win32 汇编[20]: 洞察标志寄存器
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/16580592.html
Copyright © 2020-2023  润新知