diff options
| author | bernard <[email protected]> | 2017-09-29 10:23:56 +0800 |
|---|---|---|
| committer | bernard <[email protected]> | 2017-09-29 10:23:56 +0800 |
| commit | cccff34fcac04f34233a33e453f2d0ec255bf231 (patch) | |
| tree | d406036f73296b27f3cb96e77ede98dd7803c61d /examples | |
| parent | e9a77b513f0a4b37d539a030592a61b08d03602d (diff) | |
| parent | 3691b67e83ab57196dfc62606b1be18db76994a7 (diff) | |
Merge branch 'master' of https://github.com/RT-Thread/rt-thread
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/network/tcp_client.py | 16 | ||||
| -rw-r--r-- | examples/network/tcp_server.py | 34 | ||||
| -rw-r--r-- | examples/network/tcpclient.c | 32 | ||||
| -rw-r--r-- | examples/network/tcpsendpacket.c | 99 | ||||
| -rw-r--r-- | examples/network/tcpserver.c | 23 |
5 files changed, 153 insertions, 51 deletions
diff --git a/examples/network/tcp_client.py b/examples/network/tcp_client.py new file mode 100644 index 0000000000..d8ae125fdb --- /dev/null +++ b/examples/network/tcp_client.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +import socket + +s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) + +s.connect(('192.168.10.110',6001)) + +print s.recv(1024) + +for data in ['rtt_nano','rtt_thread','rtt_bsp']: + s.send(data) + print s.recv(1024) + +s.send('exit') +s.close()
\ No newline at end of file diff --git a/examples/network/tcp_server.py b/examples/network/tcp_server.py new file mode 100644 index 0000000000..537e35e043 --- /dev/null +++ b/examples/network/tcp_server.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +#引入模块 +import socket +import threading +import time +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +# 监听端口: +s.bind(('192.168.10.110', 6001)) + +s.listen(5) +print 'Waiting for connection...' + +def tcp_link(sock,addr): + print 'Accept new connection from %s:%s...' % addr + sock.send('Welcome to RT-Thread!') + while True: + data=sock.recv(1024) + time.sleep(1) + if data=='exit' or not data: + break + print data + sock.send('Hello,%s!'%data) + sock.close() + print 'Connection from %s:%s closed.'%addr + +while True: + + #接受一个新连接 + sock,addr=s.accept() + + #创建新线程来处理TCP连接 + t=threading.Thread(target=tcp_link(sock,addr)) + diff --git a/examples/network/tcpclient.c b/examples/network/tcpclient.c index 7a0d4b5365..c7a53c609f 100644 --- a/examples/network/tcpclient.c +++ b/examples/network/tcpclient.c @@ -1,12 +1,14 @@ #include <rtthread.h> -#include <lwip/netdb.h> /* 为了解析主机名,需要包含netdb.h头文件 */ + +#include <lwip/netdb.h> /* 为了解析主机名,需要包含netdb.h头文件 */ #include <lwip/sockets.h> /* 使用BSD socket,需要包含sockets.h头文件 */ -#define BUFSZ 1024 +#define BUFSZ 1024 static const char send_data[] = "This is TCP Client from RT-Thread."; /* 发送用到的数据 */ void tcpclient(const char* url, int port) { + int ret; char *recv_data; struct hostent *host; int sock, bytes_received; @@ -56,15 +58,22 @@ void tcpclient(const char* url, int port) { /* 从sock连接中接收最大BUFSZ - 1字节数据 */ bytes_received = recv(sock, recv_data, BUFSZ - 1, 0); - if (bytes_received <= 0) + if (bytes_received < 0) { /* 接收失败,关闭这个连接 */ lwip_close(sock); + rt_kprintf("\nreceived error,close the socket.\r\n"); /* 释放接收缓冲 */ rt_free(recv_data); break; } + else if (bytes_received == 0) + { + /* 打印recv函数返回值为0的警告信息 */ + rt_kprintf("\nReceived warning,recv function return 0.\r\n"); + continue; + } /* 有接收到数据,把末端清零 */ recv_data[bytes_received] = '\0'; @@ -73,6 +82,7 @@ void tcpclient(const char* url, int port) { /* 如果是首字母是q或Q,关闭这个连接 */ lwip_close(sock); + rt_kprintf("\n got a 'q' or 'Q',close the socket.\r\n"); /* 释放接收缓冲 */ rt_free(recv_data); @@ -85,7 +95,21 @@ void tcpclient(const char* url, int port) } /* 发送数据到sock连接 */ - send(sock,send_data,strlen(send_data), 0); + ret = send(sock,send_data,strlen(send_data), 0); + if (ret < 0) + { + /* 接收失败,关闭这个连接 */ + lwip_close(sock); + rt_kprintf("\nsend error,close the socket.\r\n"); + + rt_free(recv_data); + break; + } + else if (ret == 0) + { + /* 打印send函数返回值为0的警告信息 */ + rt_kprintf("\n Send warning,send function return 0.\r\n"); + } } return; diff --git a/examples/network/tcpsendpacket.c b/examples/network/tcpsendpacket.c index 50841e0149..e7c514806e 100644 --- a/examples/network/tcpsendpacket.c +++ b/examples/network/tcpsendpacket.c @@ -1,58 +1,67 @@ #include <rtthread.h> -#include <lwip/netdb.h> /* Ϊ�˽�������������Ҫ����netdb.hͷ�ļ� */ +#include <lwip/netdb.h> /* Ϊ�˽�������������Ҫ����netdb.hͷ�ļ� */ #include <lwip/sockets.h> /* ʹ��BSD socket����Ҫ����sockets.hͷ�ļ� */ void tcp_senddata(const char* url, int port, int length) { - struct hostent *host; - int sock, err, result, timeout, index; - struct sockaddr_in server_addr; - rt_uint8_t *buffer_ptr; + struct hostent *host; + int sock, err, result, timeout, index; + struct sockaddr_in server_addr; + rt_uint8_t *buffer_ptr; - /* ͨ��������ڲ���url���host��ַ��������������������������� */ - host = gethostbyname(url); - /* ����һ��socket��������SOCKET_STREAM��TCP���� */ - if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) - { - /* ����socketʧ�� */ - rt_kprintf("Socket error\n"); - return; - } + /* ͨ��������ڲ���url���host��ַ��������������������������� */ + host = gethostbyname(url); + /* ����һ��socket��������SOCKET_STREAM��TCP���� */ + if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) + { + /* ����socketʧ�� */ + rt_kprintf("Socket error\n"); + return; + } - /* �����ڴ� */ - buffer_ptr = rt_malloc(length); - /* ���췢������ */ - for (index = 0; index < length; index ++) - buffer_ptr[index] = index & 0xff; + /* �����ڴ� */ + buffer_ptr = rt_malloc(length); + /* ���췢������ */ + for (index = 0; index < length; index ++) + buffer_ptr[index] = index & 0xff; - timeout = 100; - /* ���÷��ͳ�ʱʱ��100ms */ - lwip_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); - /* ��ʼ��Ԥ���ӵķ���˵�ַ */ - server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(port); - server_addr.sin_addr = *((struct in_addr *)host->h_addr); - rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); + timeout = 100; + /* ���÷��ͳ�ʱʱ��100ms */ + lwip_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); + /* ��ʼ��Ԥ���ӵķ���˵�ַ */ + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(port); + server_addr.sin_addr = *((struct in_addr *)host->h_addr); + rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); - /* ���ӵ������ */ - err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); - rt_kprintf("TCP thread connect error code: %d\n", err); + /* ���ӵ������ */ + err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); + rt_kprintf("TCP thread connect error code: %d\n", err); - while(1) - { - /* �������ݵ�sock���� */ - result = send(sock, buffer_ptr, length, MSG_DONTWAIT); - if(result == -1) //���ݷ��ʹ����� - { - rt_kprintf("TCP thread send error: %d\n", result); - lwip_close(sock); //�ر����ӣ����´������� - rt_thread_delay(10); - if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) - rt_kprintf("TCP Socket error:%d\n",sock); - err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); - rt_kprintf("TCP thread connect error code: %d\n", err); - } - } + while(1) + { + /* �������ݵ�sock���� */ + result = send(sock, buffer_ptr, length, MSG_DONTWAIT); + if(result < 0) //���ݷ��ʹ����� + { + rt_kprintf("TCP thread send error: %d\n", result); + lwip_close(sock); + + /* �ر����ӣ����´������� */ + rt_thread_delay(10); + + if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) + rt_kprintf("TCP Socket error:%d\n",sock); + + err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); + rt_kprintf("TCP thread connect error code: %d\n", err); + } + else if (result == 0) + { + /* ��ӡsend��������ֵΪ0�ľ�����Ϣ */ + rt_kprintf("\n Send warning,send function return 0.\r\n"); + } + } } #ifdef RT_USING_FINSH diff --git a/examples/network/tcpserver.c b/examples/network/tcpserver.c index 3f34bc2c29..c08949ea83 100644 --- a/examples/network/tcpserver.c +++ b/examples/network/tcpserver.c @@ -9,6 +9,7 @@ void tcpserv(void* parameter) int sock, connected, bytes_received; struct sockaddr_in server_addr, client_addr; rt_bool_t stop = RT_FALSE; /* 停止标志 */ + int ret; recv_data = rt_malloc(1024); /* 分配接收用的数据缓冲 */ if (recv_data == RT_NULL) @@ -72,16 +73,34 @@ void tcpserv(void* parameter) while (1) { /* 发送数据到connected socket */ - send(connected, send_data, strlen(send_data), 0); + ret = send(connected, send_data, strlen(send_data), 0); + if (ret < 0) + { + /* 发送失败,关闭这个连接 */ + lwip_close(connected); + rt_kprintf("\nsend error,close the socket.\r\n"); + break; + } + else if (ret == 0) + { + /* 打印send函数返回值为0的警告信息 */ + rt_kprintf("\n Send warning,send function return 0.\r\n"); + } /* 从connected socket中接收数据,接收buffer是1024大小,但并不一定能够收到1024大小的数据 */ bytes_received = recv(connected,recv_data, 1024, 0); - if (bytes_received <= 0) + if (bytes_received < 0) { /* 接收失败,关闭这个connected socket */ lwip_close(connected); break; } + else if (bytes_received == 0) + { + /* 打印recv函数返回值为0的警告信息 */ + rt_kprintf("\nReceived warning,recv function return 0.\r\n"); + continue; + } /* 有接收到数据,把末端清零 */ recv_data[bytes_received] = '\0'; |
