基于socket的实时视频传输大概需要以下基本函数:
**在服务端:建立socket-bind-listen-accept
在客户端:建立socket-connect
通俗看来说就是在创建socket后服务端的作用是连接服务端的IP,端口然后聆听等待客户端的连接之后接受服务端的数据,而客户端创建socket后就是连接服务端,传送数据。话不多说先上代码

SERVER:

#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>#pragma comment(lib,"ws2_32.lib")int main(void)
{//初始化WSAWORD sockVersion = MAKEWORD(2, 2);//使用的是WINSOCK 2版本WSADATA wsaData;if (WSAStartup(sockVersion, &wsaData) != 0){return 0;}SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (slisten == INVALID_SOCKET){printf("socket error !");return 0;}sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);//连接端口sin.sin_addr.S_un.S_addr = INADDR_ANY;//可接受所有IPif (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR){printf("bind error !");}if (listen(slisten, 5) == SOCKET_ERROR)// 监听5代表着最大等待长度{printf("listen error !");return 0;}SOCKET sClient;sockaddr_in remoteAddr;int nAddrlen = sizeof(remoteAddr);printf("等待连接...\n");do{sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);} while (sClient == INVALID_SOCKET);printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
// 以上都是创建socket通信的通常步骤也就是我开头所说的流程所需要的,如有不懂可以查看这几个函数得具体功能。char recvData[1000000] = "";//接受客户端发送数据的缓存IplImage *image_src = cvCreateImage(cvSize(640, 480), 8, 1);//接受到的图片是640*480int i, j;int ret;cvNamedWindow("server", 1);while (true){//接收客户端的数据ret = recv(sClient, recvData, 1000000, 0);if (ret > 0){for (i = 0; i < image_src->height; i++){for (j = 0; j < image_src->width; j++){((char *)(image_src->imageData + i * image_src->widthStep))[j] = recvData[image_src->width * i + j];}}//以上就是传送一张图片的过程ret = 0;}cvShowImage("server", image_src);//显示图片cvWaitKey(1);}cvDestroyWindow("server");closesocket(slisten);WSACleanup();return 0;
}

Client:

#include "stdafx.h"
#include <WINSOCK2.H>
#include <iostream>
#include <stdio.h>
#include <cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;#pragma  comment(lib,"ws2_32.lib")int main(int argc, char* argv[])
{WORD sockVersion = MAKEWORD(2, 2);WSADATA data;if (WSAStartup(sockVersion, &data) != 0){return 0;}SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sclient == INVALID_SOCKET){printf("invalid socket !\n");return 0;}sockaddr_in serAddr;serAddr.sin_family = AF_INET;serAddr.sin_port = htons(8888);serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //这里可以改成服务端的IP,若是都在一台电脑就不用改变if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR){printf("connect error !\n");closesocket(sclient);return 0;}VideoCapture capture(0);//打开摄像头,cvQueryFrame这个函数并不能打开我的摄像头,好像是因为函数版本太低,我的是VS2017+opencv3.3.0,若是可以使用cvQueryFrame那么就不用进行下面的图片拷贝以及转换if (!capture.isOpened()){printf("摄像头打开失败,请检查设备!\n");}int i, j;char sendData[1000000] = "";// 存放要输出去的数据cvNamedWindow("client", 1);Mat frame;  //定义一个Mat类的framewhile (1){capture >> frame;// 将摄像头拍摄的每一帧图片都放进frameIplImage* img = &IplImage(frame);IplImage *image_src = cvCloneImage(img);//这是一个深拷贝讲Mat类变成IplImage类,若是上面打开摄像头的cvQueryFrame函数可以用那么就不用转换for (i = 0; i < image_src->height; i++){for (j = 0; j < image_src->width; j++){sendData[image_src->width * i + j] = ((char *)(image_src->imageData + i * image_src->widthStep))[j];}}cvShowImage("client",image_src);cvWaitKey(3);send(sclient, sendData, 1000000, 0);}cvReleaseImage(&image_dsrc);cvDestroyWindow("client");closesocket(sclient);WSACleanup();return 0;
}

以上就是我可以把自己电脑摄像头拍摄的视频实时传输给服务端的代码,亲测有用,也希望能够帮助大家。本人也是刚开始学习这个,希望能与大家一起交流

基于socket(TCP)和opencv的实时视频传输相关推荐

  1. 计算机视觉——利用openCV与Socket结合进行远程摄像头实时视频传输并保存图片数据

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.TCP协议通信步骤 二.代码实现 1.客户端 2.服务端 三.IP设置方法 四.效果演示 前言 本文的内容是利用o ...

  2. Android使用Socket(Tcp/Udp)协议进行数据传输(传输大文件)

    先揭晓一下前面天的抽奖活动中奖人员: 恭喜这位同学中奖,麻烦你在微信公众号留言你的收货地址,或者加入QQ群:417046685 来找我也行. 同时,知识星球的活动还在继续,现在加入知识星球立即赠送技术 ...

  3. ios实现基于socket tcp/ip 的通讯

    http://www.wappu.cn/2013/communication_0504/976.html

  4. 基于Socket、OpenCV和MFC实现的网络实时视频监控

    文章目录 1 摘要 2 概述 3 客户端的设计与实现 3.1 OpenCV图像处理 3.1.1 cv::VideoCapture类 3.1.2 图像压缩编码 3.2 Socket 网络通信 4 服务器 ...

  5. 基于python的文件传输程序_GitHub - orange0cat/python-ft: 基于socket的文件传输程序,能传输整个文件夹...

    FileTransporter 这是一个基于socket(TCP)的文件(夹)传输程序 预览效果 0.环境搭建 在virtualenv环境下,cd 进入 requirements.txt所在目录,执行 ...

  6. 利用TCP传输协议实现基于Socket的聊天程序(高级版_多线程)

    大家好,在上篇<利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)>博客中,所写程序只是实现简单的连接通信,基于控制台实现,运用了TCP和UDP两种传输协议.今天我和大家分 ...

  7. 基于socket网络编程技术实现TCP和UDP的流程详解及实例

    具体函数讲解太多,根据程序自行分析. 可以参考这篇文章: https://blog.csdn.net/qq_41687938/article/details/119102328?spm=1001.20 ...

  8. c++使用OpenSSL基于socket实现tcp双向认证ssl(使用TSL协议)代码实现

    相信各位对OpenSSL库已经不陌生了,目前笔者使用这个库实现了RSA.AES加解密和tcp的双向认证功能,下面来看tcp的双向认证. 1.什么是双向认证 简单说双向认证就是:客户端认证服务端是否合法 ...

  9. 基于Socket的TCP协议Linux聊天系统(即时聊天、传送文件)

    基于Socket的TCP协议Linux聊天系统(即时聊天.传送文件)有源码!!!! 4.1 需求分析 4.1.1 系统目的 4.1.2 系统结构图 4.1.3 系统功能 4.1.4 系统数据流图 4. ...

  10. 利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)

    TCP TCP (Transmission Control Protocol)属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用 ...

最新文章

  1. Jmeter之Bean shell使用(五)
  2. 2020-11-21(线性扫描反汇编算法和递归下降扫描反汇编算法)
  3. Netweaver和CloudFoundry是如何运行Web应用的?
  4. HAproxy部署配置
  5. IDEA Translation插件安装及设置鼠标悬浮提示的自动翻译
  6. 服务容错保护断路器Hystrix之四:断路器监控(Hystrix Dashboard)-turbine集群监控
  7. Eclipse+JBoss+MySQL开发环境设置全攻略
  8. EIGRP MD5认证实例
  9. 人工智能与深度学习概念(2)——人工神经网络-ANN
  10. (转)PLSQL Developer 12.0.7连接Oracle12c数据库
  11. 终结者:log4j的真正正确使用方式
  12. VB.NET 教程_01_基础语法
  13. 批发表情包,掏出了python 3分钟爬取表情包素材,分享给你
  14. pythonudp通信程序_python中UDP编程实现通信
  15. mtk刷机报错4032专业维修教程(图文)
  16. 国内首个“新基建”安全大赛启动了!
  17. uni-app 编译成H5页面运行,提示“连接服务器超时,请点击屏幕重试”
  18. RTX客户端插件开发 for Delphi XE6 (二)
  19. android 设置圆形图片,android 圆形头像,自定义圆形ImageView
  20. java pdfbox2 中文乱码_使用PdfBox实现pdf转图片,解决中文方块乱码等问题

热门文章

  1. 安消一体智能分析终端服务器
  2. 基于aircrack-ng、crunch的wifi握手包爆破
  3. 用VB制作自己的IE网页浏览器
  4. 克鲁伊夫:巴萨孤独求败 无巨星照样演完美风暴(2009-11-26)
  5. 致远项目管理SPM系统案例:中天金融集团股份有限公司项目管理
  6. Web地图服务、WMS 请求方式、网络地图服务(WMS)的三大操作
  7. win10复制粘贴不能用解决方法汇总
  8. 威洛特:你的猫有以下6种情形 ,便知把你当父母还是孩子
  9. 五光十色变色龙的制作
  10. idea 查看方法在哪被调用快捷键_IntelliJ IDEA最常用快捷键快速查看手册-工欲善其事,必先利其器...