基于SOCKET发送图片总结.docx

上传人:牧羊曲112 文档编号:3385027 上传时间:2023-03-12 格式:DOCX 页数:4 大小:38.62KB
返回 下载 相关 举报
基于SOCKET发送图片总结.docx_第1页
第1页 / 共4页
基于SOCKET发送图片总结.docx_第2页
第2页 / 共4页
基于SOCKET发送图片总结.docx_第3页
第3页 / 共4页
基于SOCKET发送图片总结.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《基于SOCKET发送图片总结.docx》由会员分享,可在线阅读,更多相关《基于SOCKET发送图片总结.docx(4页珍藏版)》请在三一办公上搜索。

1、基于SOCKET发送图片总结基于socket的图片传输系统设计 一设计思路。 本设计利用了socket通信的原理,通过socket建立一个服务端和客户端相互通信并发送图片最后在QT上显示。设计用到知识有:socket编程、多进程的编程、多路I/O复用、QT的编程。 二部分知识解析。 socket通信实质以及过程介绍。 Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于

2、文件描述符的句柄。socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为PF_INET,表示互联网协议族;type参数指定socket的类型: SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket,允许程序使用低层协议;protocol通常赋值0。 Socket调用返回一个整型socket描述符,你可以在后面的调用使用它。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实

3、际上建立一个Socket意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。 通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过 调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用 bind函数来配置本地信息。 Bind函数将socket与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。Bind函数原型为:int bind(int sockfd,struct sockaddr

4、 *my_addr, int addrlen); 面向连接的客户程序使用Connect函数来配置socket并与远端服务器建立一个TCP连接,其函数原型为:int connect(int sockfd, struct sockaddr *serv_addr,int addrlen);Connect函数启动和远端主机的直接连接。只有面向连接的客户程序使用socket时才需要将此socket与远端主机相连。无连接协议从不建立直接连接。面向连接的服务器也从不启动一个连接,它只是被动的在协议端口监听客户的请求。 Listen函数使socket处于被动的监听模式,并为该socket建立一个输入数据队列,

5、将到达的服务请求保存在此队列中,直到程序处理它们。 Send和recv这两个函数用于面向连接的socket上进行数据传输。Send函数原型为:int send(int sockfd, const void *msg, int len, int flags); Sockfd是你想用来传输数据的socket描述符;msg是一个指向要发送数据的指针;Len是以字节为单位的数据的长度;flags一般情况下置为0。 Send函数返回实际上发送出的字节数,可能会少于你希望发送的数据。在程序中应该将send的返回值与欲发送的字节数进行比较。当send返回值与len不匹配时,应该对这种情况进行处理。 发送图片

6、模块介绍。 其实发送图片和一般的发送数据完全一样,在这里在 /home 下有一张图片“1.jpg”,那么建立socket连接后,就要调用fopen函数打开这个图片,注意是以二进制流的方式打开,这样打开之后就可以读取到其中的数据。原型为:fP=fopen(/home/1.jpg,ab),这样打开之后图片就可以读取出来,然后读取到一个数组里。函数原型为:fd=fread(buffer,1,sizeof(fp),fp)这样就可以把buffer里的数据发送到soxket套接字中。 图片接收端介绍 图片接收端主要是利用QT写的一个服务器的程序。程序如下: QLabel *label=new QLabel

7、 (, 0); /初始化qlabel QPixmap pm (/yanjl/qt/qt_jpg/han.jpg); /设定要显示的图片 ui-label-setPixmap(pm); /将图片加载到label上 ui-label-setGeometry( 0, 0, 240, 320 ); /屏幕大小,初始位置 QTcpSocket、QtcpServer是在socket的基础上封装各种类,原理都一样,大差不差。QT的特征是信号和槽,实现多线程,比平时要容易很多。 1、 侦听QTcpServer.listen(QHostAddress:Any,5023) 2、 有连接请求时,QTcpServer

8、产生newConnection信号,调用nextPendingConnection接受请求并返回QTcpSocket,就可以用这个类进行通信了。 3、 每收到一个数据包,QTcpSocket会readyRead信号,调用QtcpSocket.readAll读取数据,读到QByteArray bytearray类型数组里; 4、 存成一个图片QFile-write(bytearray),或直接显示成一个图片 Qpixmap.loadFromData(bytearray); 三为何要用到多进程。 其实主要考虑到多个客户端相应服务器的问题,就设计了两个进程,一个进程负责linsten一个进程专门处理 accept,这样就可以实现多个客户端相互连接。 四系统最后截图如下: 1. 运行程序,准备连接 图一 执行QT端 服务端程序 开始接受客户端连接 2.客户端运行,准备发送图片。 图二 开始运行客户端程序,准备传送图片。 图三。QT正正在接受图片瞬间截图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号