https://github.com/Guozhanxin/tcpserver
A TCP server that supports multiple clients
https://github.com/Guozhanxin/tcpserver
Last synced: 3 months ago
JSON representation
A TCP server that supports multiple clients
- Host: GitHub
- URL: https://github.com/Guozhanxin/tcpserver
- Owner: Guozhanxin
- License: apache-2.0
- Created: 2019-07-11T02:44:17.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2022-05-19T02:33:55.000Z (almost 3 years ago)
- Last Synced: 2025-01-07T20:50:51.447Z (3 months ago)
- Language: C
- Size: 22.5 KB
- Stars: 8
- Watchers: 1
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rt-thread - tcpserver - A TCP server that supports multiple clients. (Packages / IoT)
- awesome-rt-thread - tcpserver - A TCP server that supports multiple clients. (Packages / IoT)
README
# TCP server
[中文页](README_ZH.md) | English
## Introduction
This software package is a TCP server that supports multi-client connection and communication. Using a simple API, you can create a server and communicate with different clients.
This server has the following characteristics:
- Simultaneous operation of multiple servers
- Multiple network card support, support binding to specific IP
- Support blocking reception and non-blocking notification callback reception.
- Support independent exchange of data with different clients.## Instructions for use
### Dependence
- RT-Thread 3.1.0+
- SAL
- DFS (select)### Get the package
To use the tcpserver software package, you need to select it in the RT-Thread package management. The specific path is as follows:
```
RT-Thread online packages --->
IoT-internet of things --->
[*] TCP Server:A TCP server that supports multiple clients
(tcpserv) tcpserver name
(4096) tcpserver stack size
(12) tcpserver thread priority
(512) Maximum possible socket usage
(5) Number of clients supported
[] Enable debugging features
[*] Enable sample
Version (latest) --->
```- **tcpserver name**: Configure the name of tcpserver
- **tcpserver stack size**: Configure the size of the thread stack
- **tcpserver thread priority**: Configure thread priority
- **Maximum possible socket usage**: the maximum value of sockets that the system may use
- **Number of clients supported**: The number of clients that support simultaneous connections
- **Enable debugging features**: Enable debugging features
- **Enable sample**: Enable sample code
- **Version**: software package version selection### Using packages
#### API details
##### Create server
Create a TCP server and pass in the ip address and port number of the server.
```
struct tcpserver *tcpserver_create(const char *ip, rt_uint16_t port);
```**Function Parameters**
| Parameters | Description |
| -------- | --------------------------------- |
| ip | ip address to bind |
| port | Port number to bind |
| **Back** | **——** |
|> 0 | Success, return a tcp server handle. |
| = 0 | Failure |##### Destroy the server
Destroy a TCP server and reclaim resources.
```
rt_err_t tcpserver_destroy(struct tcpserver *server);
```**Function Parameters**
| Parameters | Description |
| -------- | ------------------------- |
| server | The handle of the tcp server to be destroyed |
| **Back** | **——** |
| = 0 | Success |
| <0 | Failure |##### Get the client
Obtain a TCP client, and block a client.
```
tcpclient_t tcpserver_accept(struct tcpserver *server, rt_int32_t timeout);
```**Function Parameters**
| Parameters | Description |
| -------- | ------------------------------------------------ |
| server | tcp server handle |
| timeout | Waiting timeout time, RT_WAITING_FOREVER means waiting forever. |
| **Return** | **——** |
|> 0 | Success, return a tcp client handle. |
| = 0 | Failure |##### Close the client
Close a TCP client.
```
rt_err_t tcpserver_close(tcpclient_t client);
```**Function Parameters**
| Parameters | Description |
| -------- | ---------------- |
| client | tcp client handle |
| **Back** | **——** |
| = 0 | Success. |
| <0 | Failure |##### Receive data from the client
Receive data from the client.
```
rt_size_t tcpserver_recv(tcpclient_t client, void *buf, rt_size_t size, rt_int32_t timeout);
```**Function Parameters**
| Parameters | Description |
| -------- | ------------------------------------------------ |
| client | tcp client handle |
| buf | buffer address |
| size | Buffer size |
| timeout | Waiting timeout time, RT_WAITING_FOREVER means waiting forever. |
| **Back** | **——** |
|> 0 | Success, return the received data length. |
| = 0 | Failure |##### Send data to the client
Send data to the client.
```
rt_size_t tcpserver_send(tcpclient_t client, void *buf, rt_size_t size, rt_int32_t timeout);
```**Function Parameters**
| Parameters | Description |
| -------- | ---------------------------- |
| client | tcp client handle |
| buf | buffer address |
| size | Buffer size |
| timeout | Waiting timeout time, **not yet implemented** |
| **Return** | **——** |
|> 0 | Success, the length of the data sent. |
| = 0 | Failure |##### Set event notification callback function
Set the event notification callback function of the server.
```
void tcpserver_set_notify_callback(struct tcpserver *server,
void (*tcpserver_event_notify)(tcpclient_t client, rt_uint8_t event));
```**Function Parameters**
| Parameters | Description |
| ---------------------- | ---------------- |
| server | tcp server handle |
| tcpserver_event_notify | Function pointer to be set |
| **Back** | **——** |#### Run the sample program
The software package comes with a sample program for the echo server. After opening the sample program of the software package, you can use it.
Compile, download and run, there will be two commands, `tcpserver` and `tcpserver_stop`. They are creating TCP server and closing TCP server.
First enter the IP address and port number to create a server, and then you can use the network debugging assistant to communicate with this server. Enter `tcpserver_stop` to shut down the server.
```
\ | /
-RT-Thread Operating System
/ | \ 3.1.3 build Jul 11 2019
2006-2019 Copyright by rt-thread team
lwIP-2.0.2 initialized!
[4] I/sal.skt: Socket Abstraction Layer initialize success.
msh />ifconfig
network interface device: e0 (Default)
MTU: 1500
MAC: 00 04 a3 12 34 56
FLAGS: UP LINK_UP INTERNET_UP DHCP_ENABLE ETHARP BROADCAST IGMP
ip address: 192.168.12.117 # Local IP address
gw address: 192.168.10.1
net mask: 255.255.0.0
dns server #0: 192.168.10.1
dns server #1: 223.5.5.5
msh />tcpserver 192.168.12.117 5000 # Create server
msh />[173861] D/tcpserv: client connect:5 # The client connects successfully
[180220] D/tcpserv: client disconnect:5 # The client disconnects
msh />tcpserver_stop # Shut down the server
msh />
```## Precautions
- The timeout mechanism of the tcpserver_send function has not been implemented yet
- If the number of supported clients has not been reached, but the total connection is wrong, it may be limited by lwip.## contact information
- Maintainer: [flybreak]([email protected])
- Homepage: [tcpserver]()