套接字(socket)是 Linux 下的一种进程间通信机制(socket IPC),它不仅支持同一主机的不同进程间通信,还支持跨网络的不同主机的进程间通信。
socket 允许通过标准的文件描述符进行网络数据传输,支持各种网络协议,如 TCP 和 UDP,它把复杂的 TCP/IP 协议隐藏在 socket 接口下,对用户来说,一组简单的接口就是全部,让 socket 去组织数据,以符合指定的协议。
基于 socket 接口编写的应用程序可以移植到任何实现 BSD socket 标准的平台。本文介绍了 Linux 下使用 socket 接口实现 TCP 服务端的示例程序。
- 开发环境:虚拟机 Ubuntu 18.04
- 验证平台:Elfboard Linux 开发板
- 客户端:Windows 网络调试助手 NetAssist
示例代码
- tcp_server.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include #include #include #include #include #include #include #include #include #include "tcp_server.h" int server_init_socket( void ) { int socket_fd; struct sockaddr_in address; if ((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror ( "socket failed" ); exit (EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); if (bind(socket_fd, ( struct sockaddr *)&address, sizeof (address)) |
- tcp_server.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef __TCP_SERVER__ #define __TCP_SERVER__ #include #define PORT 8080 #define BUFFER_SIZE 1024 int server_init_socket( void ); int server_accept_client( int socket_fd); int server_set_socket_timeout( int socket_fd, long milliseconds); int server_receive_data( int socket_fd, char *message, ssize_t *size) ; void server_send_data( int socket_fd, const char *message, ssize_t size); int server_check_tcp_connection( int socket_fd); int server_close_socket( int fd); #endif |
- main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include #include "tcp_server.h" int main( void ) { int server_fd, client_fd; char buffer[1024] = {0}; ssize_t size = 0; server_fd = server_init_socket(); client_fd = server_accept_client(server_fd); server_send_data(client_fd, "Hello Client!" , 13); server_receive_data(client_fd, buffer, &size); printf ( "%s" , buffer); server_close_socket(client_fd); server_close_socket(server_fd); return 0; } |
- 通过交叉编译生成目标程序,拷贝到 Elfboard Linux 开发板上
板级验证
- 启动 Elfboard Linux 开发板作为服务端,查看 IP:
- 打开网络调试助手,配置协议类型为 TCP 客户端,设置服务端 IP、端口号:
- 运行服务端程序,等待客户端连接:
- 客户端点击连接:
- 服务端显示客户端已连接:
- 客户端收到服务端发送的消息:
- 客户端回复服务端消息:
- 服务端接收到客户端消息:
以上就是Linux下使用使用socket实现TCP服务端的示例代码的详细内容,更多关于Linux socket实现TCP服务端的资料请关注IT俱乐部其它相关文章!