网络编程:我们都应该知道服务端和客户端C/S模式,下面我们遵循一个网络编程的规律:

服务端:socket ——> bind ——> listen ——> accept

客户端:socket ——> listen

下面就是代码部分,遵循了上面的规律,大家不懂的函数可以百度查看含义

服务端代码:

// server.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <iostream>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void initialization();
int main() {//定义长度变量int send_len = 0;int recv_len = 0;int len = 0;//定义发送缓冲区和接受缓冲区char send_buf[100];char recv_buf[100];//定义服务端套接字,接受请求套接字
    SOCKET s_server;SOCKET s_accept;//服务端地址客户端地址
    SOCKADDR_IN server_addr;SOCKADDR_IN accept_addr;initialization();//填充服务端信息server_addr.sin_family = AF_INET;server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(5010);//创建套接字s_server = socket(AF_INET, SOCK_STREAM, 0);if (bind(s_server, (SOCKADDR*)& server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {cout << "套接字绑定失败!" << endl;WSACleanup();}else {cout << "套接字绑定成功!" << endl;}//设置套接字为监听状态if (listen(s_server, SOMAXCONN) < 0) {cout << "设置监听状态失败!" << endl;WSACleanup();}else {cout << "设置监听状态成功!" << endl;}cout << "服务端正在监听连接,请稍候...." << endl;//接受连接请求len = sizeof(SOCKADDR);s_accept = accept(s_server, (SOCKADDR*)& accept_addr, &len);if (s_accept == SOCKET_ERROR) {cout << "连接失败!" << endl;WSACleanup();return 0;}cout << "连接建立,准备接受数据" << endl;//接收数据while (1) {recv_len = recv(s_accept, recv_buf, 100, 0);if (recv_len < 0) {cout << "接受失败!" << endl;break;}else {cout << "客户端信息:" << recv_buf << endl;}cout << "请输入回复信息:";cin >> send_buf;send_len = send(s_accept, send_buf, 100, 0);if (send_len < 0) {cout << "发送失败!" << endl;break;}}//关闭套接字
    closesocket(s_server);closesocket(s_accept);//释放DLL资源
    WSACleanup();return 0;
}
void initialization() {//初始化套接字库WORD w_req = MAKEWORD(2, 2);//版本号
    WSADATA wsadata;int err;err = WSAStartup(w_req, &wsadata);if (err != 0) {cout << "初始化套接字库失败!" << endl;}else {cout << "初始化套接字库成功!" << endl;}//检测版本号if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {cout << "套接字库版本号不符!" << endl;WSACleanup();}else {cout << "套接字库版本正确!" << endl;}//填充服务端地址信息

}

客户端代码

// client.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include<iostream>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void initialization();
int main() {//定义长度变量int send_len = 0;int recv_len = 0;//定义发送缓冲区和接受缓冲区char send_buf[100];char recv_buf[100];//定义服务端套接字,接受请求套接字
    SOCKET s_server;//服务端地址客户端地址
    SOCKADDR_IN server_addr;initialization();//填充服务端信息server_addr.sin_family = AF_INET;server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");server_addr.sin_port = htons(5010);//创建套接字s_server = socket(AF_INET, SOCK_STREAM, 0);if (connect(s_server, (SOCKADDR*)& server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {cout << "服务器连接失败!" << endl;WSACleanup();}else {cout << "服务器连接成功!" << endl;}//发送,接收数据while (1) {cout << "请输入发送信息:";cin >> send_buf;send_len = send(s_server, send_buf, 100, 0);if (send_len < 0) {cout << "发送失败!" << endl;break;}recv_len = recv(s_server, recv_buf, 100, 0);if (recv_len < 0) {cout << "接受失败!" << endl;break;}else {cout << "服务端信息:" << recv_buf << endl;}}//关闭套接字
    closesocket(s_server);//释放DLL资源
    WSACleanup();return 0;
}
void initialization() {//初始化套接字库WORD w_req = MAKEWORD(2, 2);//版本号
    WSADATA wsadata;int err;err = WSAStartup(w_req, &wsadata);if (err != 0) {cout << "初始化套接字库失败!" << endl;}else {cout << "初始化套接字库成功!" << endl;}//检测版本号if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {cout << "套接字库版本号不符!" << endl;WSACleanup();}else {cout << "套接字库版本正确!" << endl;}//填充服务端地址信息

}

转载于:https://www.cnblogs.com/qkqBeer/articles/11012664.html

C++使用socket实现进程通信相关推荐

  1. java nio socket长连接_netty学习实战—实现websocket长连接和socket之间进程通信

    netty学习-实现websocket长连接和socket之间通信 最近正在学习netty,跟着教程写了一个基于WebSocket的网页聊天室,对netty有了一定的了解,现在正好项目使用到长连接,选 ...

  2. Android 跨进程通信大总结

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/111553746 本文出自[赵彦军的博客] 文章目录 1.Android进程 2.修 ...

  3. 【Binder】Android 跨进程通信原理解析

    前言 在Android开发的过程中,用到跨进程通信的地方非常非常多,我们所使用的Activity.Service等组件都需要和AMS进行跨进程通信,而这种跨进程的通信都是由Binder完成的. 甚至一 ...

  4. Unix domain socket 简介(进程间通信,进程通信)

    Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信.socket 原本是为网络通讯设 ...

  5. ARM环境中的c语言socket进程通信-转

    近由于需要弄一些android底层的进程间通讯的东西,所以重温了一下linux的进程通信知识. 进程间通信有很多种方法,使用socket只是其中的一种方法,使用socket的好处呢,就是通用,代码可以 ...

  6. Day4:应用层——网络应用层内容概述、网络应用基本原理(体系结构、进程通信、套接字socket、应用层协议)、Web应用与HTTP

    加油!寒假偷博人 一.网络应用层内容概述. 1本篇内容:(原理.实例.编程) 网络应用体系结构 客户机/服务器  P2P  混合结构 网络应用的服务需求 可靠性 带宽 时延 Inte ...

  7. 【并发编程七】C++进程通信——套接字(socket)_80行代码实现一个聊天软件

    [并发编程七]进程通信--套接字(socket)_80行代码实现一个聊天软件 一.简介 二.相关知识介绍 1.winsock1.h.winsock2.h 2.如何使用ws2_32.dll 3.WSAS ...

  8. Linux下进程通信知识点学习笔记(一)

    4种主要事件导致进程创建: 系统的初始化: 执行了正在运行的进程所调用的进程创建系统调用: 用户请求创建一个进程: 一个批处理作业的初始化: 进程的终止: 正常退出: 出错退: 严重错误: 被其他进程 ...

  9. 跨进程通信,到底用长连接还是短连接

    一个完整的软件系统大多数情况下是由多个进程共同协作进行的,哪怕它们在同一台服务器上.所以,进程之间如何进行高效的通信至关重要. 单个应用程序+单个数据库这套基础开发套餐我相信每个人都经历过,甚至在初期 ...

最新文章

  1. Spring整合Hibernate。。。。
  2. 2016 中国互联网仿冒态势分析报告
  3. 局部描述符表LDT的作用+定义+初始化+跳转相关
  4. 【渝粤题库】广东开放大学 物业财税管理基础 形成性考核
  5. POJ 2785 有多少种4个数相加等于0的方案(二分查找 or hash)
  6. JAVA并发包内容_java并发包
  7. 什么才是一份好的AI求职简历?
  8. 兄弟9055cdn硒鼓清零_dcp—9020cdn硒鼓怎么清零
  9. Docker 如何支持多种日志方案?- 每天5分钟玩转 Docker 容器技术(88)
  10. Microsoft AJAX Library对 String的扩展
  11. 《大学计算机基础》试题题库及答案
  12. 真人qq秀代码_波士顿动力Spot买家秀
  13. 一、super slomo介绍
  14. thinksnsv4.6运行php,开源微博系统(ThinkSNS) v4.6.1
  15. java word 图片_java导出word(带图片)
  16. 微信朋友圈装x代码_微信朋友圈装逼教程,微信小程序怎么制作“朋友圈”信息...
  17. 多路输出开关电源的设计及应用原则
  18. 四十四、​Fluent 收敛标准-质量和能量守恒
  19. 不可不知的JavaScript面向对象
  20. glusterfs之heketi 部署

热门文章

  1. android 仿携程选择城市,类似携程商旅的城市选择器 CityPicker
  2. ht1621b和单片机电平匹配_有备无患,单片机面试问题集
  3. abovedisplayskip无效_latex公式图片行间距段间距调整心得 -
  4. STM32F103+CubeMX-Keil上移植RTX5实时系统
  5. 【ES8(2017)】String扩展 padStart / padEnd
  6. 信息安全工程师笔记-案例分析(三)
  7. Spring Boot笔记-目前对Web后端开发的认识
  8. Qt与java web通过数据库实现数据展示同步
  9. VS加快程序编译速度——以VS2013为例
  10. Qt3转Qt5(Ui部分)