LWIP netconn TCP UDP测试 实例
本文由自己从网络上查资料整理而成 已经测试可用
只需修改下就能用到项目中
给需要的童鞋们参考
平台(LM3S9B92+UCOSII+LWIP)
在线IP地址转换器(二进制 十进制 十六进制转换)
http://www.ab126.com/goju/1840.html
LWIP netconn API函数下 实现的
TCP服务器
TCP客户端
UDP测试
UDP流程
conn = netconn_new(NETCONN_UDP); //创建UDP连接
netconn_bind(conn,IP_ADDR_ANY, 80); //绑定端口号
netconn_connect(conn,&destip,destport);
netconn_send(conn,UDPNetbuf); //收或发
netconn_delete(conn);
主程序(三个线程只打开了一个UDP的TCP测试的被注释了每次打开一个即可测试)
#include <includes.h>
#include "lwip/sys.h"
#include "user/my_tcp_client.h"
#include "utils/uartstdio.h"/* Application tasks */
#define TASK_INPUT_PRIO 11
#define TASK_LWIP_PRIO 3#define taskinputstck 1024
#define tasklwipstck 1024static OS_STK App_TaskStartStk[APP_CFG_TASK_START_STK_SIZE];
OS_STK taskinput_stack[taskinputstck];
OS_STK tasklwip_stack[tasklwipstck];
extern struct netif lwip_netif;
extern void stellarisif_input(void *arg);
extern void httpd_thread(void *arg);
extern void my_lwip_init(void);
extern void tftp_thread(void *arg);static void App_TaskStart (void *p_arg);int main (void)
{BSP_PreInit ();BSP_IntDisAll();OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel" */OSTaskCreateExt((void (*)(void *)) App_TaskStart, /* Create the start task */(void *) 0,(OS_STK *)&App_TaskStartStk[APP_CFG_TASK_START_STK_SIZE - 1],(INT8U ) APP_CFG_TASK_START_PRIO,(INT16U ) APP_CFG_TASK_START_PRIO,(OS_STK *)&App_TaskStartStk[0],(INT32U ) APP_CFG_TASK_START_STK_SIZE,(void *) 0,(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));OSStart();
}static void App_TaskStart (void *p_arg)
{(void)p_arg;BSP_PostInit(); /* Initialize BSP functions */Tmr_TickInit (); /* Initialize the SysTick */my_lwip_init();OSTaskCreate(stellarisif_input,(void *)&lwip_netif,&taskinput_stack[taskinputstck - 1],TASK_INPUT_PRIO);//OSTaskCreate(httpd_thread,/*OSTaskCreate(tftp_thread,(void *)0,&tasklwip_stack[tasklwipstck - 1],TASK_LWIP_PRIO);*//* OSTaskCreate(my_tcp_client_thread,(void *)0,&tasklwip_stack[tasklwipstck - 1],TASK_LWIP_PRIO);*/// sys_thread_new("tcpserv",my_tcp_server_thread, (void *)0, 1024, 2); //测试TCP服务器
// sys_thread_new("tcpclt",my_tcp_client_thread, (void *)0, 1024, 2); //测试TCP客户端sys_thread_new("udp",my_udp_thread, (void *)0, 1024, 2); //测试UDP#if (OS_TASK_STAT_EN > 0)OSStatInit(); /* Determine CPU capacity */
#endif for(;;){OSTaskSuspend(OS_PRIO_SELF); /* The start task can be pended here. */ }
}
测试程序
头文件
#ifndef __MY_TCP_CLIENT_H__
#define __MY_TCP_CLIENT_H__void my_tcp_server_thread(void *arg);
void my_tcp_client_thread(void *arg);
void my_udp_thread(void *arg);
#endif
.C文件
#include "includes.h" /* uC/OS interface */
#include "lwip/api.h"#include <stdio.h>
#include <string.h>#include "user/my_tcp_client.h"
#include "utils/uartstdio.h"
//*********************************************************
//
// tcp 服务器端测试程序
//
//*********************************************************
void my_tcp_server_thread(void *arg)
{struct netconn *conn, *newconn = NULL;struct netbuf *TCPNetbuf;char getText[]="hello i am server!";conn = netconn_new(NETCONN_TCP); /* 创建TCP连接 */netconn_bind(conn,NULL,80); /* 绑定本地地址和监听的端口号 */ netconn_listen(conn); /* 进入监听状态 */UARTprintf("\033[2JTCP listening\n");while(1){newconn = netconn_accept(conn); /*阻塞当前进程到有数据接收 */if(newconn != NULL){ /* 发送数据 */netconn_write(newconn,(void *)&getText,sizeof(getText),NETCONN_NOCOPY);netbuf_delete(TCPNetbuf); netconn_close(newconn); /* 关闭连接 */while(netconn_delete(newconn) != ERR_OK)OSTimeDlyHMSM(0, 0, 1, 0);}}
}
//*********************************************************
//
// tcp 客户端测试程序
//
//*********************************************************
void my_tcp_client_thread(void *arg)
{struct netconn *conn;struct netbuf *TCPNetbuf;
// char *dat;err_t myerr;char Text[]="hello i am client!";static struct ip_addr serverip; //目标机IPstatic unsigned short serverport; //目标机端口号serverip.addr = htonl(0xC0A8016A); //192.168.1.106serverport=7000; conn = netconn_new(NETCONN_TCP); /* 创建TCP连接 */netconn_bind(conn,NULL,7000); /* 绑定本地地址和监听的端口号 */ OSTimeDlyHMSM(0, 0, 3, 0);UARTprintf("\033[2JTCP connect....\n"); myerr=netconn_connect(conn,&serverip,serverport); //连接主机 cnn,目标机IP,端口号if(myerr==-1){UARTprintf("\033[2JTCP connect err\n");}else{UARTprintf("\033[2JTCP connect ok\n");}/* 建立一个新的netbuf */TCPNetbuf =netbuf_new();
// netbuf_alloc(TCPNetbuf, 40);/* 引用这个文本给netbuf */netbuf_ref(TCPNetbuf,Text,sizeof(Text));while(1){ OSTimeDlyHMSM(0, 0, 3, 0);/* 发送文本 */netconn_send(conn,TCPNetbuf);netconn_write(conn,(void *)&Text,sizeof(Text),NETCONN_NOCOPY);OSTimeDlyHMSM(0, 0, 3, 0);/* 删除conn和buf */netconn_delete(conn);netbuf_delete(TCPNetbuf);}
}//*********************************************************
//
// tcp 客户端测试程序
//
//*********************************************************
void my_udp_thread(void *arg)
{static struct netconn *conn;static struct netbuf *UDPNetbuf;static struct ip_addr destip; //目标机IPstatic unsigned short destport; //目标机端口号unsigned char Array[]="hello i am udp!";destip.addr = htonl(0xC0A8016A); //192.168.1.106destport=7000; /* 建立一个新的netbuf */
// UDPNetbuf =netbuf_new();conn = netconn_new(NETCONN_UDP); //创建UDP连接netconn_bind(conn,IP_ADDR_ANY, 80); //绑定端口号while(1){OSTimeDlyHMSM(0, 0, 3, 0);UARTprintf("\033[2JUDP connec...\n");/* 连接远程主机 */netconn_connect(conn,&destip,destport);/* 建立一个新的netbuf */UDPNetbuf= netbuf_new(); /* 引用这个文本给netbuf */netbuf_ref(UDPNetbuf,Array, sizeof(Array));/* 发送文本 */netconn_send(conn,UDPNetbuf);OSTimeDlyHMSM(0, 0, 3, 0); /* 删除conn和buf */netconn_delete(conn);netbuf_delete(UDPNetbuf); //释放缓冲区} }
最后附上一个TCP服务器接收并把收到的数据返回的参考
/* Grab new connection. */
newconn = netconn_accept(conn);
/* Process the new connection. */
if (newconn)
{
struct netbuf *buf;
void *data;
u16_t len;
while ((buf = netconn_recv(newconn)) != NULL)
{
do
{
netbuf_data(buf, &data, &len);
netconn_write(newconn, data, len, NETCONN_COPY);
}
while (netbuf_next(buf) >= 0);
netbuf_delete(buf);
}
/* Close connection and discard connection identifier. */
netconn_close(newconn);
netconn_delete(newconn);
参考文章 http://www.amobbs.com/thread-5059971-1-1.html
LWIP netconn TCP UDP测试 实例相关推荐
- [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 ...
- OSI七层模型以及TCP/UDP客户端/服务端程序实例
OSI七层模型以及TCP/UDP客户端/服务端程序实例 一.前言 二.OSI简介 2.1 OSI概念 2.2 划分原则 2.3 OSI七层模型 2.4 模型举例 三.Linux下TCP/UDP程序开发 ...
- php udp发送和接收_php socket通信(tcp/udp)实例分析
本文实例讲述了php socket通信(tcp/udp)方法.分享给大家供大家参考,具体如下: 注意 1.在socket_bind的时候ip地址不能真回环地址如127.0.0.1 2.server.p ...
- PacketSender —— TCP/UDP 包测试工具
Packet Sender 是一个开源的发送和接收TCP/UDP包得测试工具.主线分支官方支持Windows,Mac和Ubuntu桌面Linux(开源),同时提供 Android 版本(免费).网络应 ...
- linux udp 端口测试,RAKsmart:Linux下TCP/UDP 端口测试及验证方法说明
RAKsmart:Linux下TCP/UDP 端口测试及验证方法说明2020-06-11 在 Linux 系统中,有时需要在系统中测试端口的连通性,以便确认系统的TCP.UDP协议栈是否可以正常运行. ...
- Linux服务器上测试TCP/UDP端口的连通性
目录 说明 测试tcp端口的连通性: 使用nc命令来测试udp端口的连通性: 使用nc命令来测试tcp端口的连通性: 使用案例如下: 说明 翻译自: How to Test Port[TCP/UDP] ...
- TCP/UDP端口连接测试
TCP/UDP端口连接测试 TCP端口连接测试 测试主机与目标端口的网络是否通畅 telnet ip port UDP端口连接测试 1.测试目标端口是否正常(前提是目标主机上启动了服务端口,且本机与服 ...
- linux 开通udp 端口号,Linux 下 TCP/UDP 端口测试及验证方法说明
Linux 下 TCP/UDP 端口测试及验证方法说明 在云服务器 ECS Linux 系统中,有时需要在系统中测试端口的连通性,以便确认系统的TCP.UDP协议栈是否可以正常运行.本文对此进行简要说 ...
- linux监测本机udp发动情况,Linux 下 TCP/UDP 端口测试及验证方法说明
在云服务器 ECS Linux 系统中,有时需要在系统中测试端口的连通性,以便确认系统的TCP.UDP协议栈是否可以正常运行.本文对此进行简要说明. TCP端口测试 使用 telnet 测试现有监听端 ...
最新文章
- Docker 入门系列(3)- Docker 容器(创建、启动、终止、进入、删除、导入、导出容器、容器和镜像转化)
- 【MongoDB异常】Exception authenticating MongoCredential解决方法
- 谷歌邮箱上不了的情况下怎么登录谷歌邮箱
- 机器学习XGBoost——后面的明天更
- nginx进阶-动静分离,负载均衡
- j2me学习三_LCDui类学习(2)
- ABPZero系列教程之拼多多卖家工具
- 静物摄影用光技巧_摄影技巧:摄影如何用光?摄影大师总结的10点,非常受用!...
- 爬虫,反爬工具fake-useragent,随机useragent模块教程
- 141_Power Query之获取钉钉审批流自动刷新Power BI报告
- 分析数万条国庆旅游评论数据后,我发现了“坑爹”景点背后的秘密
- 洛谷——P1009 [NOIP1998 普及组] 阶乘之和
- BZOJ3757: 苹果树【树上莫队】
- 《神奇的数学》读后感_数学家的眼光读后感
- 微信可以登录,代理服务器没有响应
- A Benchmark and Simulator for UAV Tracking(论文翻译)
- C#由指定数据生成灰度位图或者彩色位图
- 厉害了!中国农历算法
- 【JavaScript】“...“是什么?
- 推荐不伤眼睛的文字背景色
热门文章
- 需要达到什么样的水平才能找到一份看起来不错的互联网实习?
- linux运行luminati,安装luminati的nodejs环境配置
- 汽车网络安全标准UN Regulation No.155和No.156汇总介绍
- Windows redis最新版本5.0.9下载
- java字节流与字符流的区别编码缓冲
- 怎样学习嵌入式软件开发
- android 微信分享注册链接显示app的logo出现黑边处理方案
- Python算法- 剪绳子
- icheck 动态设置选中,判断是否选择
- ROS入门-ROS的安装及编写简单的节点talker和listener