hw0921

 多线程发送方

#include <myhead.h>
int main(int argc, const char *argv[])
{//创建流式套接字int cfd=socket(AF_INET,SOCK_STREAM,0);printf("socket success\n");//填充服务器地址struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(4444);sin.sin_addr.s_addr=inet_addr("192.168.125.230");//连接服务器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0){perror("connect");return -1;}printf("connect success\n");char buf[128]="";ssize_t res=0;while(1){bzero(buf,sizeof(buf));printf("输入:");scanf(" %s",buf);//	buf[strlen(buf)-1]='\0';write(cfd,buf,sizeof(buf));/*	res=recv(cfd,buf,sizeof(buf),0); if(res<0){perror("recv");}else if(0==res){printf("服务器链接失败\n");break;}*/	printf("[192.168.122.84,4444]:%s\n",buf);}close(cfd);return 0;
}

多线程接收方

#include <myhead.h>
int main(int argc, const char *argv[])
{//创建流式套接字int cfd=socket(AF_INET,SOCK_STREAM,0);printf("socket success\n");//填充服务器地址struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(4444);sin.sin_addr.s_addr=inet_addr("192.168.125.230");//连接服务器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0){perror("connect");return -1;}printf("connect success\n");char buf[128]="";ssize_t res=0;while(1){bzero(buf,sizeof(buf));printf("输入:");scanf(" %s",buf);//	buf[strlen(buf)-1]='\0';write(cfd,buf,sizeof(buf));/*	res=recv(cfd,buf,sizeof(buf),0); if(res<0){perror("recv");}else if(0==res){printf("服务器链接失败\n");break;}*/	printf("[192.168.122.84,4444]:%s\n",buf);}close(cfd);return 0;
}
ubuntu@ubuntu:TCP$ cat pth_ser.c
#include <myhead.h>
#define PORT 4444
#define IP "192.168.125.230"
struct Climsg{int newfd;struct sockaddr_in cin;
};
int main(int argc, const char *argv[])
{//创建流式套接字int sfd=socket(AF_INET,SOCK_STREAM,0);printf("socket success\n");//允许端口被重复使用int reuse=1;setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0;printf("允许端口被重复使用\n");//bindstruct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(PORT);sin.sin_addr.s_addr=inet_addr(IP);bind(sfd,(struct sockaddr*)&sin,sizeof(sin));printf("bind success\n");//listenlisten(sfd,128);//存储客户端信息0struct sockaddr_in cin;socklen_t addrlen=sizeof(cin);int newfd;pthread_t tid;struct Climsg info;while(1){newfd=accept(sfd,(struct sockaddr*)&cin,&addrlen);if(newfd<0){perror("accept");return -1;}printf("connect success\n");printf("[%s:%d]\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));info.newfd=newfd;info.cin=cin;pthread_create(&tid,NULL,deal_cli_msg,(void*)&info);pthread_detach(tid);//分离线程}close(sfd);return 0;
}
void* deal_cli_msg(void *info)
{int newfd=((struct Climsg*)info)->newfd;struct sockaddr_in cin=((struct Climsg*)info);char buf[128];ssize_t res=0;while(1){bzero(buf,sizeof(buf));//接收数据res=recv(newfd,buf,sizeof(buf),0);if(res<0){perror("recv");break;}else if(0==res){printf("[%s:%d]客户端下线\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);if(strcmp(buf,"quit")==0){break;}//发送数据strcat(buf,"-_-_--");if(send(newfd,buf,sizeof(buf),0)<0){perror("send");break;}printf("发送成功\n");}close(newfd);
}

多进程发送方

#include <myhead.h>
int main(int argc, const char *argv[])
{//创建流式套接字int cfd=socket(AF_INET,SOCK_STREAM,0);printf("socket success\n");//填充服务器地址struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(4444);sin.sin_addr.s_addr=inet_addr("192.168.125.230");//连接服务器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0){perror("connect");return -1;}printf("connect success\n");char buf[128]="";ssize_t res=0;while(1){bzero(buf,sizeof(buf));printf("输入:");scanf(" %s",buf);//	buf[strlen(buf)-1]='\0';write(cfd,buf,sizeof(buf));/*	res=recv(cfd,buf,sizeof(buf),0); if(res<0){perror("recv");}else if(0==res){printf("服务器链接失败\n");break;}*/	printf("[192.168.122.84,4444]:%s\n",buf);}close(cfd);return 0;
}

多线程接收方

ubuntu@ubuntu:TCP$ cat tcp_ser.c
#include <myhead.h>
#define PORT 4444
#define IP "192.168.125.230"
void handler(int sig)
{while(waitpid(-1,NULL,WNOHANG)>0);return;
}
int main(int argc, const char *argv[])
{//17信号if(signal(SIGCHLD,handler)==SIG_ERR){ERR_MSG("signal");return -1;}//创建流式套接字int sfd=socket(AF_INET,SOCK_STREAM,0);printf("socket success\n");//允许端口被重复使用int reuse=1;setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0;printf("允许端口被重复使用\n");//bindstruct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(PORT);sin.sin_addr.s_addr=inet_addr(IP);bind(sfd,(struct sockaddr*)&sin,sizeof(sin));printf("bind success\n");//listenlisten(sfd,128);//存储客户端信息0struct sockaddr_in cin;socklen_t addrlen=sizeof(cin);int newfd;pid_t p;while(1){newfd=accept(sfd,(struct sockaddr*)&cin,&addrlen);printf("1\n");if(newfd<0){perror("accept");return -1;}printf("connect success\n");printf("[%s:%d]\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));p=fork();if(p==0){//接收char buf[128]="";size_t res=0;while(1){bzero(buf,sizeof(buf));res=recv(newfd,buf,sizeof(buf),0); if(res<0){perror("recv");}else if(0==res){printf("客户端链接失败,客戶端IP:%s\n,客戶端端口:%d\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);}close(newfd);exit(0);}close(newfd);}return 0;
}

广播发送方

#include <myhead.h>
#define PORT 4444
#define IP "192.168.125.255"
int main(int argc, const char *argv[])
{//创建流式套接字int cfd=socket(AF_INET,SOCK_DGRAM,0);printf("socket success\n");//允许端口被重复使用int reuse=1;setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0;printf("允许端口被重复使用\n");int a=1;if(setsockopt(cfd,SOL_SOCKET,SO_BROADCAST,&a,sizeof(a))<0){printf("setsockopt broadcast");}printf("a=%d\n",a);printf("设置广播成功\n");//服务器地址struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(PORT);sin.sin_addr.s_addr=inet_addr(IP);char buf[128]="";ssize_t res=0;socklen_t addrlen=sizeof(sin);while(1){//发送bzero(buf,sizeof(buf));printf("输入:");scanf("%s",buf);sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,addrlen);printf("发送成功\n");//接收/*	bzero(buf,sizeof(buf));res=recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&addrlen); if(res<0){perror("recv");}printf(":%s\n",buf);
*/}close(cfd);return 0;
}

广播接收方

#include <myhead.h>
#define PORT 4444
#define IP "192.168.125.255"
int main(int argc, const char *argv[])
{//创建流式套接字int sfd=socket(AF_INET,SOCK_DGRAM,0);printf("socket success\n");//允许端口被重复使用int reuse=1;setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0;printf("允许端口被重复使用\n");
/*	int size1=0;socklen_t len=sizeof(size1);getsockopt(sfd,SOL_SOCKET,SO_RCVBUF,&size1,&len);printf("size1=%d\n",size1);
*/	//bindstruct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(PORT);sin.sin_addr.s_addr=inet_addr(IP);bind(sfd,(struct sockaddr*)&sin,sizeof(sin));printf("bind success\n");//客户端地址struct sockaddr_in cin;char buf[128]="";ssize_t res=0;socklen_t addrlen=sizeof(cin);while(1){//接收bzero(buf,sizeof(buf));res=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen); if(res<0){perror("recv");}printf(":%s\n",buf);//与发送信息的客户端绑定
/*		connect(sfd,(struct sockaddr*)&cin,addrlen);if(strcmp(buf,"quit")==0){sin.sin_family=AF_UNSPEC;printf("断开连接\n");}//发送bzero(buf,sizeof(buf));printf("输入:");scanf("%s",buf);sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,addrlen);printf("发送成功\n");*/}close(sfd);return 0;
}

组播接收方

#include <myhead.h>
#define PORT 4444
#define GIP "224.5.5.5"
#define LIP "192.168.125.230"
int main(int argc, const char *argv[])
{//创建流式套接字int sfd=socket(AF_INET,SOCK_DGRAM,0);printf("socket success\n");//允许端口被重复使用int reuse=1;setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0;printf("允许端口被重复使用\n");//加入多播组struct ip_mreqn mq;mq.imr_multiaddr.s_addr=inet_addr(GIP);//组播ipmq.imr_address.s_addr=inet_addr(LIP);//本地ipmq.imr_ifindex=2;//网络设备索引号if(setsockopt(sfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mq,sizeof(mq))<0){perror("setsockopt(group)");return -1;}printf("加入多播组[%s]成功\n",GIP);//服务器地址struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(PORT);sin.sin_addr.s_addr=inet_addr(LIP);bind(sfd,(struct sockaddr*)&sin,sizeof(sin));printf("绑定地址信息成功\n");struct sockaddr_in cin;char buf[128]="";ssize_t res=0;socklen_t addrlen=sizeof(cin);while(1){//接收bzero(buf,sizeof(buf));res=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen);if(res<0){perror("recv");}printf(":%s\n",buf);}close(sfd);return 0;
}

组播发送方

#include <myhead.h>
#define PORT 4444
#define GIP "224.5.5.5"
int main(int argc, const char *argv[])
{//创建报式套接字int cfd=socket(AF_INET,SOCK_DGRAM,0);printf("socket success\n");//允许端口被重复使用int reuse=1;setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0;printf("允许端口被重复使用\n");//服务器地址struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(PORT);sin.sin_addr.s_addr=inet_addr(GIP);char buf[128]="";ssize_t res=0;socklen_t addrlen=sizeof(sin);while(1){//发送bzero(buf,sizeof(buf));printf("输入:");scanf("%s",buf);sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,addrlen);printf("发送成功\n");//接收/*	bzero(buf,sizeof(buf));res=recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&addrlen); if(res<0){perror("recv");}printf(":%s\n",buf);
*/}close(cfd);return 0;
}

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

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

相关文章

大数据学习1.1-Centos8虚拟机安装

1.创建新的虚拟机 2.选择稍后安装OS 3.选择Linux的CentOS8 4.选择安装路径 5.分配20g存储空间 6.自定义硬件 7.分配2g内存 8.分配2核处理器 9.选择镜像位置 10.开启虚拟机安装 推荐密码设置为root

VMware 三种网络连接模式

VMware虚拟机的三种网络连接模式&#xff1a;桥接&#xff0c;NAT&#xff0c;仅主机。 网卡vmnet0,vmnet1,vmnet8区别。 在VMware中&#xff0c;虚拟机的网络连接主要是由VMware创建的虚拟交换机负责实现的&#xff0c;VMware可以根据需要创建多个虚拟网络。 VMware的虚拟网…

WebGL 用鼠标控制物体旋转

目录 鼠标控制物体旋转 如何实现物体旋转 示例程序&#xff08;RotateObject.js&#xff09; 代码详解 示例效果 鼠标控制物体旋转 有时候&#xff0c;WebGL程序需要让用户通过鼠标操作三维物体。这一节来分析示例程序RotateObject&#xff0c;该程序允许用户通过拖动&…

【计算机网络】信号处理接口 Signal API(1)

收发信号思想是 Linux 程序设计特性之一&#xff0c;一个信号可以认为是一种软中断&#xff0c;通过用来向进程通知异步事件。 本文讲述的 信号处理内容源自 Linux man。本文主要对各 API 进行详细介绍&#xff0c;从而更好的理解信号编程。 signal 遵循 C11&#xff0c;POSIX.…

人类学习 vs. 机器学习

摘要: 机器学习与人类学习的范式有一定的联系. 本文发掘这些联系, 作用是指导人类的学习. 1. 什么是学习? 对于人类而言, 学习是改造大脑皮层的过程. 我们会发现, 不同人学习不同东西的能力也不一样, 如有些人数学厉害, 有些人音乐厉害. 同时, 也有些牛人, 学习到了学习的方…

DC/DC开关电源学习笔记(十)Buck降压电路仿真及工程应用实例

(十)Buck降压电路仿真及工程应用实例 1. 仿真应用实例1.1 案例一1.2 案例二2. 工程应用实例2.1 数字DC/DC应用实例2.2 模拟DC/DC应用实例1. 仿真应用实例 1.1 案例一 仿真技术要求输入:输入电压30~90V,输出电压28V,输出电流最大10A,开关频率100KHz。我们按照参数极限工…

一、八大排序(sort)

文章目录 一、时间复杂度&#xff08;一&#xff09;定义&#xff1a;常数操作 二、空间复杂度&#xff08;一&#xff09;定义&#xff1a; 三、排序&#xff08;一&#xff09;选择排序1.定义2.代码3.特性 &#xff08;二&#xff09;冒泡排序1.定义2.代码3.特性 &#xff08…

雷龙CS SD NAND(贴片式TF卡)性能体验及应用

前段时间有幸得到了雷龙出品的贴片式的TF卡的芯片及转接板&#xff0c;从而对其产品进行了相应的了解和测评。 从获得的相关资料看&#xff0c;雷龙出品的贴片式芯片分为两类&#xff0c;即BOW型和AOW型&#xff0c;其中BOW型为第一代产品&#xff0c;属商业级&#xff1b;AOW…

Jackson 配置 Bigdecimal 序列化

笔者的项目使用了 jackson 序列化 要求 主要是两个方面&#xff1a; 位数&#xff1a;位数大于等于 4&#xff0c;则保留 4 位小数&#xff0c;否则保留对应的小数位数;格式&#xff1a;不出现科学技术法&#xff0c;不以 0 结尾. 代码 序列化实现&#xff1a; public cla…

【网络协议】Http-中

搜索引擎&#xff1a;搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上采集信息&#xff0c;在对信息进行组织和处理后&#xff0c;为用户提供检索服务&#xff0c;将检索的相关信息展示给用户的系统。搜索引擎是工作于互联网上的一门检索技术&#xff0c;它旨在提…

简明 SQL 组合查询指南:掌握 UNION 实现数据筛选

在SQL中&#xff0c;组合查询是一种将多个SELECT查询结果合并的操作&#xff0c;通常使用UNION和UNION ALL两种方式。 UNION 用于合并多个查询结果集&#xff0c;同时去除重复的行&#xff0c;即只保留一份相同的数据。UNION ALL 也用于合并多个查询结果集&#xff0c;但不去除…

java 通过读配制文件的方式连接库。 信息保存在文件内

# JDBC配置 db.urljdbc:mysql://mysql.sqlpub.com:3306/huangjin db.usernameXXXXXXXX db.passwordfc12f7a5215e8e0a package com.abc.project3;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.*; import java.util.Prope…

XSS跨站脚本攻击

XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击,XSS属于客户端攻击&#xff0c;受害者最终是用户&#xff0c;在网页中嵌入客户端恶意脚本代码&#xff0c;最常用javascript语言。&#xff08;注意&#xff1a;叠成样式表CSS已经被占用所以叫XSS&#xff09…

Mac使用sz/rz

从使用体验上说,sz/rz要比scp要好得多.但Mac上使用这两个命令需要进行相应配置. sz&#xff1a;将选定的文件发送&#xff08;send&#xff09;到本地机器 rz&#xff1a;运行该命令会弹出一个文件选择窗口&#xff0c;从本地选择文件上传到Linux服务器 下载安装lrzsz brew i…

浅谈Vue3——父子组件传值

引言 Vue.js是一款流行的JavaScript框架&#xff0c;用于构建用户界面。它提供了一种简洁、灵活的方式来管理和渲染数据。在Vue3中&#xff0c;父子组件之间的数据传递是一个常见的需求。本文将介绍如何在Vue3中传递对象&#xff0c;并且在子组件中访问和修改父组件对象中的属…

探索智能应用的基石:多模态大模型赋能文档图像处理

目录 0 写在前面1 文档图像分析新重点2 token荒&#xff1a;电子文档助力大模型3 大模型赋能智能文档分析4 文档图像大模型应用可能性4.1 专有大模型4.2 多模态模型4.3 设计思路 总结 0 写在前面 中国智能产业高峰论坛(CIIS2023)旨在为政企研学各界学者专家提供同台交流的机会…

rom修改----安卓系列机型如何内置app 如何选择so文件内置

系统内置app的需求 在与各工作室对接中操作单中&#xff0c;很多需要内置客户特定的有些app到系统里&#xff0c;这样方便客户刷入固件后直接调用。例如内置apk 去开机引导 去usb调试 默认开启usb安全设置等等。那么很多app内置有不同的反应。有的可以直接内置。有的需要加so…

基于 Socket 网络编程

基于 Socket 网络编程 前言一、基于Socket的网络通信传输&#xff08;传输层&#xff09;二、UDP 的数据报套接字编程1、UDP 套接字编程 API2、使用 UDP Socket 实现简单通信 三、TCP 流套接字编程1、TCP 流套接字编程 API2、使用 TCP Socket 实现简单通信3、使用 Tcp 协议进行…

【实战案例】技术转项目经理容易踩的坑,我都踩了

“带团队容易&#xff0c;带好团队难。” 这是身边一位项目经理近期在团队管理方面的深刻感悟。目前&#xff0c;他手上的一个项目被迫暂停了&#xff0c;项目团队也散了。下面给大家简要分享下这个项目案例。 【案例分享】 小李负责的是一个二次开发的项目&#xff0c;所涉及…

ULID 在 Java 中的应用: 使用 `getMonotonicUlid` 生成唯一标识符

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…