C语言实现Linux下TCP Server测试工具

Linux TCP Server测试工具代码
实现了接受数据并输出文本和十六制字符串

#include <stdio.h>
#include<string.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>#define SERVER_PORT		8081
#define SERVER_IP		"0.0.0.0"
void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen); 
int listen_fd = -1;void signal_handler(int arg)
{printf("close listen_fd(signal = %d)\n", arg);close(listen_fd);exit(0);
}int main(int argc,  char *argv[])
{int port=80;printf("argc:%d\r\n",argc);if (argc>1){printf("raw data:%s",argv[1]);port=atoi(argv[1]);printf("port:%d\r\n",port);}int new_fd  = -1;struct sockaddr_in server;struct sockaddr_in client;socklen_t saddrlen = sizeof(server);socklen_t caddrlen = sizeof(client);signal(SIGINT, signal_handler);memset(&server, 0, sizeof(server));memset(&client, 0, sizeof(client));listen_fd = socket(AF_INET, SOCK_STREAM, 0);if (listen_fd < 0){printf("socket error!\n");return -1;}int opt = 1;setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof( opt ));server.sin_family = AF_INET;server.sin_port = htons(port);server.sin_addr.s_addr = inet_addr(SERVER_IP);if (bind(listen_fd, (struct sockaddr *)&server, saddrlen) < 0){printf("bind error!\n");return -1;}printf("listen:%d\r\n",port); if (listen(listen_fd, 5) < 0){printf("listen error!\n");return -1;}char rbuf[256] = {0};char hexStr[1024]={0};int read_size = 0;while (1){/*socket()创建的套接字默认是阻塞的,所以accept()在该套接字上进行监听时,如果没有客户端连接请求过来,accept()函数会一直阻塞等待;换句话说,程序就停在accept()函数这里,不会继续往下执行,直到有新的连接请求发送过来,唤醒accept()。*/new_fd = accept(listen_fd, (struct sockaddr *)&client, &caddrlen);if (new_fd < 0){perror("accept");return -1;}printf("new client connected.IP:%s,port:%u\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));while (1){memset(&rbuf,0,sizeof(rbuf));read_size = read(new_fd, rbuf, sizeof(rbuf));if (read_size < 0){printf("read error!\n");continue;}else if (read_size == 0){printf("client (%d) is closed!\n", new_fd);close(new_fd);break;}printf("recv:%s\n", rbuf);memset(&hexStr, 0, sizeof(hexStr));ByteToHexStr(rbuf,hexStr,read_size);printf("recv HexStr:%s\n",hexStr);}}close(listen_fd);return 0;
}
void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen)
{short i;unsigned char highByte, lowByte;for (i = 0; i < sourceLen; i++){highByte = source[i] >> 4;lowByte = source[i] & 0x0f;highByte += 0x30;if (highByte > 0x39)dest[i * 2] = highByte + 0x07;elsedest[i * 2] = highByte;lowByte += 0x30;if (lowByte > 0x39)dest[i * 2 + 1] = lowByte + 0x07;elsedest[i * 2 + 1] = lowByte;}return;
}

编译

# 编译gcc tcpserver.c -o tcpserver
# 运行
./tcpserver 8081

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32内存介绍

ROM是一种只读存储器&#xff0c;经历了从NOR Flash到NAND Flash再到现在的eMMC的发展。为了便于使用和大批量生产&#xff0c;ROM进一步分为了4种类型&#xff1a;PROM、EPROM、EEPROM和Flash。PROM只能被编程一次&#xff0c;EPROM可擦写可编程且可达1000次&#xff0c;EEPRO…

leetcode/hot100

文章目录 一、哈希1.两数之和2.字母异位词分组3.最长连续序列 二、双指针4. 移动零5.盛最多水的容器6.三数之和7.接雨水 三、滑动窗口8.无重复字符的最长子串9.找到字符串中所有字母异位词 四、子串10.和为 K 的子数组 一、哈希 1.两数之和 1. 两数之和 class Solution { pu…

规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法

文章目录 系列文章索引五、规则属性1、enabled属性2、dialect属性3、salience属性4、no-loop属性5、activation-group属性6、agenda-group属性7、auto-focus属性8、timer属性9、date-effective属性10、date-expires属性 六、Drools高级语法1、global全局变量2、query查询3、fun…

20231122给RK3399的挖掘机开发板适配Android12

20231122给RK3399的挖掘机开发板适配Android12 2023/11/22 9:30 主要步骤&#xff1a; rootrootrootroot-X99-Turbo:~$ tar --use-compress-programpigz -xvpf rk356x_android12_220722.tgz rootrootrootroot-X99-Turbo:~$ cd rk_android12_220722/ rootrootrootroot-X99-Tur…

rk3568 适配以太网(mac 2 mac)

rk3568 适配以太网(mac 2 mac) MDI(Media Dependent Interface)是以太网中的一种接口标准,用于连接物理层(PHY)和数据链路层(MAC)之间的传输介质。 在以太网中,MDI通常通过RJ-45插座来实现,用于连接网线和网络设备。MDI接口提供了电气和机械特性,使得PHY和MAC能够正…

Python通过串口收发文件

单位内外网是隔离的,USB对拷线被禁用,安全优盘使用太费事,就想到了通过串口传输文件. import serial from xmodem import XMODEM import osdef Send_File(filepath, portCOM8, baudrate115200):bn os.path.basename(filepath)filesize os.stat(filepath).st_sizestrSendFile…

带记忆的超级GPT智能体,能做饭、煮咖啡、整理家务!

随着AI技术的快速迭代&#xff0c;Alexa、Siri、小度、天猫精灵等语音助手得到了广泛应用。但在自然语言理解和完成复杂任务方面仍然有限。 相比文本的标准格式&#xff0c;语音充满复杂性和多样性&#xff08;例如&#xff0c;地方话&#xff09;,传统方法很难适应不同用户的…

【每日OJ —— 20.有效的括号(栈)】

每日OJ —— 20.有效的括号&#xff08;栈&#xff09; 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09;2.方法讲解2.1.解法2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09; 2.方法讲解 2.1.解法 利用…

2023 年 亚太赛 APMCM (B题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 问题一&#xff1a; 建立没有作物的玻璃温室内的温度和风速分…

C语言二十四弹--喝汽水问题

C语言解决喝汽水问题 题目&#xff1a;喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;给20元&#xff0c;可以喝多少汽水&#xff1f; 方法一、逐瓶购买法 思路&#xff1a;一瓶瓶的买 当空瓶有两个时&#xff0c;汽水数加1即可。 #include &…

MacOS 成为恶意软件活动的目标

Malwarebytes 警告称&#xff0c;一个针对 Mac 操作系统 (OS) 的数据窃取程序正在通过虚假的网络浏览器更新分发给毫无戒心的目标。 Atomic Stealer&#xff0c;也称为 AMOS&#xff0c;是 Mac OS 上流行的窃取程序。 Atomic Stealer (AMOS) 恶意软件最近被发现使用“ClearFa…

ImportError: cannot import name ‘contextfilter‘ from ‘jinja2‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

汇编-pop出栈指令

32位汇编 执行动作分为两步&#xff1a; 第一步&#xff1a;读出数据 第二步&#xff1a;改变栈地址 如果操作数是16位&#xff0c; 则ESP加2&#xff1b; 如果操作数是32位&#xff0c; 则ESP加4 espesp2 或 espesp4 格式&#xff1a;

九、sdl显示bmp图片

前言 SDL中内置加载BMP的API&#xff0c;使用起来会更加简单&#xff0c;便于初学者学习使用SDL 如果需要加载JPG、PNG等其他格式的图片&#xff0c;可以使用第三方库&#xff1a;SDL_image 测试环境&#xff1a; ffmpeg的4.3.2自行编译版本windows环境qt5.12sdl2.0.22&…

力扣第462题 最小操作次数使数组元素相等 II C++ 排序基础 附Java代码

题目 462. 最小操作次数使数组元素相等 II 中等 相关标签 数组 数学 排序 给你一个长度为 n 的整数数组 nums &#xff0c;返回使所有数组元素相等需要的最小操作数。 在一次操作中&#xff0c;你可以使数组中的一个元素加 1 或者减 1 。 示例 1&#xff1a; 输入&a…

Python深入分享之闭包

闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中&#xff0c;我们见到过函数(function)&#xff1b;在面向对象编程中&#xff0c;我们见过对象(object)。函数和对象的根本目的是以某种…

substr()与substring()的区别

在 JavaScript 编程语言中&#xff0c;substr() 和 substring() 都是字符串函数&#xff0c;用于截取指定位置的子字符串。虽然这两个函数都可以用于截取字符串&#xff0c;但它们之间存在一些区别。 substr() 语法&#xff1a;string.substr(start,length) 参数值&#xff1a…

IDEA中 java: 警告: 源发行版 11 需要目标发行版 11 如何解决

步骤1找到项目结构&#xff0c;下面有两种方式 步骤2找到 模块中对应的项目&#xff0c;修改对应的源的语言级别和依赖的模块SDK(M) 步骤3&#xff0c;启动一下&#xff0c;看有无问题&#xff0c; 步骤4&#xff0c;去文件-->设置-->构建、执行、部署-->编译器-->…

中职组网络安全B模块-渗透提权2

任务五&#xff1a;渗透提权2 任务环境说明&#xff1a; 仅能获取xxx的IP地址 用户名&#xff1a;test&#xff0c;密码&#xff1a;123456 访问服务器主机&#xff0c;找到主机中管理员名称&#xff0c;将管理员名称作为Flag值提交&#xff1b; Flag:doyoudoyoudo 访问服…

C语言二十三弹---求第N项斐波那契数列的值

C语言求第N项斐波那契数列的值 定义&#xff1a;斐波那契数列指的是这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89…自然中的斐波那契数列&#xff0…