当前位置: 首页 > article >正文

Linux:socket实现两个进程之间的通信

本文展示了服务端和客户端进行网络通信的示例:服务端向客户端发送数据,客户端读取服务端发送过来的数据;废话不多说,直接上代码!
服务端代码:

#include <sys/socket.h>
#include <cstdlib>
#include <unistd.h>
#include <cstdio>
#include <sys/types.h>
#include <arpa/inet.h>
int main()
{

	//Step01:Create a socket
	int fd_monitor = socket(AF_INET,SOCK_STREAM,0);
	if(fd_monitor==-1)
	{
		printf("Failed to create file descriptor!\n");
		return -1;
	}

	//Step02;Set ip address and port for current processing
	sockaddr_in myaddr;
	myaddr.sin_family = AF_INET;
	myaddr.sin_addr.s_addr = INADDR_ANY;
	myaddr.sin_port = htons(8888);


	int iResBind = bind(fd_monitor,(sockaddr*)&myaddr,sizeof(myaddr));
	if(iResBind==-1){
		printf("Failed to bind!\n");
		return -2;
	}

	//Step03:Listen connection
	int iResListen = listen(fd_monitor,128);
	if(iResListen==-1){
		printf("Failed to listen!\n");
		return -3;
	}

	//Step04:Wait connection from client
	int fd_communication = accept(fd_monitor,NULL,NULL);
	if(fd_communication < 0)
	{
		printf("Failed to accept!\n");
		return -4;
	}

	//Step05:Write data to client
	char buffer[1024];
	while(1)
	{
		sprintf(buffer,"Hello! I am server!\n");
		write(fd_communication,buffer,sizeof(buffer));
		sleep(3);
	}

	//Step06:Close communication file descriptor
	close(fd_communication);
	return 0;

}

客户端代码:

#include <cstdlib>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstdio>
#include <cstring>
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888

int main()
{
	//Step01:Create socket
	int fd_communication = socket(AF_INET,SOCK_STREAM,0);
	if(fd_communication==-1)
	{
		printf("Failed to create socket!\n");
		return -1;
	}

	//Step02:Connect server
	sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port =htons(SERVER_PORT);
	inet_pton(AF_LOCAL,SERVER_IP,&addr.sin_addr.s_addr);
	int iResConnect = connect(fd_communication,(sockaddr*)&addr,sizeof(addr));
	if(iResConnect==-1)
	{
		printf("Failed to connect server\n");
		return -2;
	}

	//Step03:Communicate with server
	char buffer[1024];
	while(1){
		memset(buffer,0,sizeof(buffer));
		int iLen = read(fd_communication,buffer,sizeof(buffer));
		printf("recv data:%s\n",buffer);
		sleep(1);
	}
	close(fd_communication);
	return 0;
}

需要说明的是:服务端创立的套接字对象需要绑定ip地址和端口号;客户端connect服务端的时候需要提供服务端的ip地址和端口号(服务端提供服务的进程的端口号)


http://www.kler.cn/news/367489.html

相关文章:

  • 【计算机操作系统】课程 作业二 进程与线程 408考研
  • JavaScript完整笔记
  • 依赖关系是危险的
  • 1189.Pell数列
  • 61 mysql 存储引擎之动态格式 MyISAM
  • 分布式光伏发电系统电气一次部分设计(开题报告3)
  • #单体到微服务架构服务演化过程
  • Mermaid流程图完全指南
  • 2024年10月25日练习(双指针算法)
  • Redis 主从同步 问题
  • python一键运行所有bat脚本
  • 机器学习(10.14-10.20)(Pytorch GRU的原理及其手写复现)
  • P1588 [USACO07OPEN] Catch That Cow S
  • Unity C#脚本的热更新
  • 单细胞 | 转录因子足迹分析
  • Docker容器间通信
  • 深入了解 MySQL 中的 INSERT ... SELECT 语句
  • iOS弹出系统相册选择弹窗
  • VS/Qt Creator +QT生成带.ico图标的.exe 并打包
  • qt QLabel详解
  • 智能合约在Web3中的作用:区块链技术的创新实践
  • JAVA基础-树和Set集合
  • uiautomatorviewer中的两个错误
  • 在虚拟化环境中,虚拟机的资源分配是否真的能够完全等效于物理服务器?是否有某些特定的工作负载在虚拟化环境中始终无法达到理想表现?
  • 【ChatGPT插件漏洞三连发之一】未授权恶意插件安装
  • Chromium HTML5 新的 Input 类型search对应c++