网络编程1

embedded/2024/11/24 22:13:26/

多进程实现网络通信(TCP)

服务器端函数

#include <myhead.h>
#define PORT 8848
#define IP "192.168.60.78"
#define BACKLOG 20
void fun(int sss)
{if(sss==SIGCHLD){waitpid(-1,NULL,0);}
}
int main(int argc, const char *argv[])
{if(signal(SIGCHLD,fun)==SIG_ERR){perror("signal");return -1;}//int oldfd=socket(AF_INET,SOCK_STREAM,0);if(oldfd==-1){perror("socket");return -1;}//struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(PORT),.sin_addr.s_addr=inet_addr(IP),};if((bind(oldfd,(struct sockaddr *)&server,sizeof(server))==-1)){perror("bind");	return -1;}//int n=11;if(setsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(n))==-1){perror("setsockopt");return -1; }printf("端口复用成功|\n");//if(listen(oldfd,BACKLOG)==-1){perror("listen");return -1;}//struct sockaddr_in client;socklen_t client_len=sizeof(client);char buff[1024];
while(1)
{pid_t pid=fork();int newfd=accept(oldfd,(struct sockaddr*)&client,&client_len);if(newfd==-1){perror("accept");return -1;}if(pid==0){printf("来自%s的连接",inet_ntoa(client.sin_addr));close(oldfd);while(1){memset(buff,0,sizeof(buff));int len=recv(newfd,buff,sizeof(buff),0);if(len==0){printf("客户端下线\n");break;}printf("消息:%s\n",buff);strcat(buff,"ok");	send(newfd,buff,sizeof(buff),0);}close(newfd);exit(0);}else if(pid>0){close(newfd);}else{perror("fork");return -1;}}return 0;
}

客户端函数

#include <myhead.h>
#define PORT 8848
#define IP "192.168.60.78"
int main(int argc, const char *argv[])
{int oldfd=socket(AF_INET,SOCK_STREAM,0);if(oldfd==-1){perror("socket");return -1;}//struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(PORT),.sin_addr.s_addr=inet_addr(IP),};if((connect(oldfd,(struct sockaddr *)&server,sizeof(server)))==-1){perror("connect");	return -1;}char buff[1024];while(1){fgets(buff,sizeof(buff),stdin);buff[strlen(buff)-1]='\0';send(oldfd,buff,sizeof(buff),0);int len=recv(oldfd,buff,sizeof(buff),0);if(len==0){printf("服务器下线\n");break;}printf("服务器消息:%s\n",buff);}return 0;
}


http://www.ppmy.cn/embedded/140221.html

相关文章

微积分复习笔记 Calculus Volume 1 - 6.5 Physical Applications

6.5 Physical Applications - Calculus Volume 1 | OpenStax

移门缓冲支架:减少噪音,提升生活质量

在现代家居设计中&#xff0c;移门因其节省空间、操作简便的特点而被广泛采用。然而&#xff0c;传统的移门在关闭时往往会产生较大的噪音&#xff0c;这种噪音不仅影响家庭成员的休息和睡眠&#xff0c;也可能导致邻里间的不满。移门缓冲支架的出现&#xff0c;正是为了应对这…

[C++]:特殊类的设计

1. 不可拷贝类 我们知道&#xff0c;某些资源只能有一个对象持有&#xff0c;拷贝可能导致资源混乱。例如智能指针std::unique_ptr独占管理动态分配对象&#xff0c;文件句柄、网络套接字、数据库连接等资源通常也是独占的&#xff0c;不允许拷贝。 在C11之前&#xff0c;要创…

Java基础面试题02:简述什么是值传递和引用传递?

面试题&#xff1a;简述什么是值传递和引用传递&#xff1f; 什么是值传递&#xff1f; 值传递&#xff08;pass by value&#xff09;是指在调用函数时&#xff0c;把实际参数的值复制一份传递给函数。换句话说&#xff0c;函数内部对参数的任何修改&#xff0c;都不会影响到…

SpringBoot3+Jasypt如何在配置文件中对数据库的密码进行加密以防止密码泄露

在 Spring Boot 3 中&#xff0c;可以通过jasypt-spring-boot-starter对配置文件中的数据库密码或者其他重要密码进行加密&#xff0c;操作非常简单&#xff0c;可以有效防止密码泄露&#xff1a; 1. 使用 Jasypt 加密 添加依赖 在 pom.xml 中添加 Jasypt 依赖&#xff1a; …

Word Embedding

Word Embedding 一 基本概述二 word embedding可视化 哈喽,小伙伴们!今天聊一聊自然语言处理(NLP)中的一个小概念.语料的数值化转化.因为有一定了解的小伙伴应该都知道在NLP中,汉字是没办法直接送到模型训练的,因为计算机只能识别二进制的数据.所以我们需要把汉字转成张量的形式…

电脑自动关机时间如何定?Wise Auto Shutdown 设置关机教程

在日常使用电脑的过程中&#xff0c;有时我们需要让电脑在特定的时间自动关机&#xff0c;比如在下载大文件完成后、执行长时间的任务结束时&#xff0c;或者只是单纯想在某个预定时间让电脑自动关闭以节省能源。这时候&#xff0c;Wise Auto Shutdown 这款软件就能派上大用场了…

播放器开发之ffmpeg 硬件解码方案

硬件编解码的概念 硬件编解码是⾮CPU通过烧写运⾏视频加速功能对⾼清视频流进⾏编解码&#xff0c;其中⾮CPU可包括GPU、FPGA或者 ASIC等独⽴硬件模块&#xff0c;把CPU⾼使⽤率的视频解码⼯作从CPU⾥分离出来&#xff0c;降低CPU的使⽤负荷&#xff0c;使得平台能 ⾼效且流畅…