基于C语言的TCP通信简单demo

上代码

服务端Server

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>#define _PORT_ 9999
#define _BACKLOG_ 10int main()
{int sock=socket(AF_INET,SOCK_STREAM,0);if(sock<0){printf("socket()\n");}struct sockaddr_in server_socket;struct sockaddr_in socket;bzero(&server_socket,sizeof(server_socket));server_socket.sin_family=AF_INET;server_socket.sin_addr.s_addr=htonl(INADDR_ANY);server_socket.sin_port=htons(_PORT_);if(bind(sock,(struct sockaddr*)&server_socket,sizeof(struct sockaddr_in))<0){printf("bind()\n");close(sock);return 1;}if(listen(sock,_BACKLOG_)<0){printf("listen()\n");close(sock);return 2;}printf("success\n");for(;;){socklen_t len=0;int client_sock=accept(sock,(struct sockaddr*)&socket,&len);if(client_sock<0){printf("accept()\n");return 3;}char buf_ip[INET_ADDRSTRLEN];memset(buf_ip,'\0',sizeof(buf_ip));inet_ntop(AF_INET,&socket.sin_addr,buf_ip,sizeof(buf_ip));printf("get connect\n");while(1){char buf[1024];memset(buf,'\0',sizeof(buf));read(client_sock,buf,sizeof(buf));printf("client:# %s\n",buf);printf("server:$ ");memset(buf,'\0',sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]='\0';if(strncasecmp(buf,"quit",4)==0){printf("quit\n");break;}write(client_sock,buf,strlen(buf)+1);printf("wait...\n");}close(client_sock);}close(sock);return 0;
}

客户端Client

#include <strings.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/ip.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>void *recv_data(void *arg)
{int sockfd = *(int *)arg;char s[64] = {0};while(1){int ret = read(sockfd, s, 64);if(ret < 0){perror("read");return NULL;}printf("%s\n", s);memset(s, 0, 64);}
}int main(int argc, char *argv[])
{int sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd == -1){perror("socket");return -1;}pthread_t pid;pthread_create(&pid, NULL, recv_data, (void *)&sockfd);pthread_detach(pid);struct sockaddr_in ser;ser.sin_family = AF_INET;ser.sin_port = htons(11111);//ser.sin_addr.s_addr = inet_addr("0.0.0.0");ser.sin_addr.s_addr = htonl(INADDR_ANY);int ret = connect(sockfd, (struct sockaddr *)&ser, sizeof(ser));if(ret == -1){perror("connect");return -1;}char buf[64];while(1){fgets(buf, 64, stdin);buf[strlen(buf)-1] = '\0';write(sockfd, buf, 64);if(strcmp(buf, "time") == 0){char data[64];read(sockfd, data, 64);printf(">>:%s\n", data);memset(buf, 0, 64);memset(data, 0, 64); } else if(strncmp(buf, "get", 3) == 0) {char str[64];while(read(sockfd, str, 64) != 0) {if(strcmp(str, "over") == 0) {memset(str, 0, 64);        break;}printf(">>:%s\n", str);memset(buf, 0, 64);memset(str, 0, 64); }} else {	char arr[64] = {0};read(sockfd, arr, 64);printf(">>:%s\n", arr);memset(buf, 0, 64);memset(arr, 0, 64); }}close(sockfd);return 0;
}

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

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

相关文章

Linux读写锁相关函数及操作

读写锁&#xff1a; 概念&#xff1a;读写锁也叫共享-独占锁。当读写锁以读模式锁住时&#xff0c;它是以共享模式锁住的&#xff1b;当它以写模式锁住时&#xff0c;它是以独占模式锁住的。&#xff08;写独占&#xff0c;读共享&#xff09;。 读写锁使用场所&#xff1a; …

AI未来10年展望

人工智能&#xff08;AI&#xff09;在过去十年中迅速发展&#xff0c;其未来有望取得更加引人注目的发展。 在本文中&#xff0c;我们将探讨人工智能的未来 10 年以及我们对未来十年的期望。 我们将解决一些关键问题&#xff0c;以全面概述人工智能的未来。 1、10年后AI会发展…

智能未来: 人工智能技术的革命与影响

智能未来: 人工智能技术的革命与影响 1. 人工智能技术的快速发展 人工智能技术在近年来取得了巨大的发展&#xff0c;其涵盖了机器学习、深度学习、自然语言处理等多个领域。随着计算能力的提升和数据量的增加&#xff0c;人工智能技术的应用场景也越来越广泛。 2. 人工智能…

新学习计划

政治&#xff1a; 苍盾小程序 英语&#xff1a; 数学&#xff1a; 660不做线性代数 合工大超越卷 张宇八套卷 李艳芳三套卷 高等数学 张宇 线性代数 B站没咋了 数据结构&#xff1a;

Automated Testing for LLMOps 01:使用CircleCI进行持续集成CI

Automated Testing for LLMOps 这是学习https://www.deeplearning.ai/short-courses/automated-testing-llmops/ 这门课的笔记 Learn how LLM-based testing differs from traditional software testing and implement rules-based testing to assess your LLM application. …

基于最小二乘正弦拟合算法的信号校正matlab仿真,校正幅度,频率以及时钟误差,输出SNDR,SFDR,ENOB指标

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 最小二乘正弦拟合 4.2 SNDR、SFDR 和 ENOB 计算 4.3 校正 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................…

Android中Handler机制和原理是什么?

Handler机制是Android中用于处理线程间通信和定时任务的一种核心机制。它基于Java的Handler类和Looper类&#xff0c;允许开发者在不同的线程中发送和处理消息。以下是Handler机制的基本原理和工作流程&#xff1a; 1. **Looper**&#xff1a; - Looper是一个消息循环&…

Python 中的模块热加载(Hot Reload)

什么是热加载 热加载是指在程序运行时动态替换和重新加载模块或代码&#xff0c;而不需要重新启动整个应用程序。这种技术可用于在不间断运行的情况下更新代码、应用变更和改进&#xff0c;提高开发效率&#xff0c;加快调试过程。 Python 中如何实现热加载 Python 提供了 imp…

Post请求中文乱码问题

url*************************************这里填写自己请求的网址 response requests.post(url, datajson.dumps(body),headersheader) r response.text print 打印乱码长这样&#xff1a; data:{“code”:0,“data”:{“end”:false,“message”:“{\n “ˆ—¡A”: [“…

Vue3:全局API(应用实例)

createApp 创建一个应用实例 import { createApp } from vue import App from ./App.vue const app createApp(App);app.mount() 将应用实例挂载在一个容器元素中。 import { createApp } from vue import App from ./App.vue const app createApp(App); app.mount(#app)…

第四十五回 病关索大闹翠屏山 拚命三火烧祝家店-Python函数接受任意关键字参数

官府得到上报&#xff0c;被杀死的僧人是报恩寺的裴如海&#xff0c;旁边的头陀是寺后面的人叫胡道。孔目说他们两个互相杀死&#xff0c;没有其他人什么事&#xff0c;这件事也就过去了。 杨雄听说了这件事&#xff0c;知道是石秀干的&#xff0c;找石秀为自己错怪他道歉。两…

C++ 设计模式

文章目录 类图泛化实现关联聚合组合依赖总结 类内部的三种权限&#xff08;公有、保护、私有&#xff09;类的三种继承方式描述与图总结 面向对象七大原则单一职责原则&#xff08;Single Responsibility Principle&#xff09;里氏替换原则&#xff08;Liskov Substitution Pr…

Python is not set from command line or npm configuration 报错解决

问题 在 npm install 的过程中提示 Python is not set from command line or npm configuration 的报错&#xff0c;相信不少朋友都遇到过&#xff0c;出现这个问题的原因是缺少 python 环境所导致的。 解决方法 1、安装 python 官网&#xff1a;https://www.python.org/dow…

DVWA 靶场 SQL 注入报错 Illegal mix of collations for operation ‘UNION‘ 的解决方案

在 dvwa 靶场进行联合 SQL 注入时&#xff0c;遇到报错 Illegal mix of collations for operation UNION 报错如下图&#xff1a; 解决办法&#xff1a; 找到文件 MySQL.php 大致位置在 \dvwa\includes\DBMS 目录下 使用编辑器打开 检索 $create_db 第一个就是 在 {$_DVW…

android开发电子书,android基础编程

内存泄漏是什么&#xff1f; 内存泄漏即 ML &#xff08;Memory Leak&#xff09; 指 程序在申请内存后&#xff0c;当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象 内存泄漏有哪些情况&#xff0c;对应的解决方案&#xff1f; 内存泄漏的原因归根到底就是当需…

用OpenArk查看Windows 11电脑中全部快捷键并解决热键冲突问题

本文介绍在Windows电脑中&#xff0c;基于OpenArk工具&#xff0c;查看电脑操作系统与所有软件的快捷键&#xff0c;并对快捷键冲突加以处理的方法。 最近&#xff0c;发现有道词典的双击Ctrl功能失效了&#xff0c;不能很方便地翻译界面中的英语&#xff1b;所以&#xff0c;就…

Linux系统Docker部署StackEdit Markdown并实现公网访问本地编辑器

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

UE5 UE4 不同关卡使用Sequence动画

参考自&#xff1a;关于Datasmith导入流程 | 虚幻引擎文档 (unrealengine.com) 关卡中的Sequence动画序列&#xff0c;包含特定关卡中的Actor的引用。 将同一个Sequcen动画资源放入其他关卡&#xff0c;Sequence无法在新关卡中找到相同的Actor&#xff0c;导致报错。 Sequen…

unity 场景烘焙中植物叶片(单面网络)出现的白面

Unity版本 2021.3.3 平台 Windows 在场景烘焙中烘焙植物的模型的时候发现植物的叶面一面是合理的&#xff0c;背面是全白的&#xff0c;在材质球上勾选了双面烘焙&#xff0c;情况如下 这个问题可能是由于植物叶片的单面网格导致的。在场景烘焙中&#xff0c;单面网格只会在一…

饲料厂设备机器有哪些

饲料厂设备机器有哪些 &#xff1f; 饲料厂设备机器主要涉及到物料的加工、压制和混合过程。首先&#xff0c;物料会经过饲料粉碎的处理&#xff0c;使其颗粒细小。然后&#xff0c;物料会经过颗粒饲料机的压制&#xff0c;形成颗粒状的饲料。最后&#xff0c;颗粒饲料会通过混…