socket

Qt开发的UDP接收端

☆樱花仙子☆ 提交于 2020-03-02 07:18:07
上一篇已经说完了简单UDP发送端开发,参见我的博客:Qt开发的UDP发送端。 博文地址:https://my.oschina.net/marshal2bit/blog/803803 做完UDP发送端,我又尝试做了一个UDP接收端。先上图,做出来的样子如下: 一、开发环境(和上篇博文一样) 系统:Windows 7 专业版(64位) 软件:qt-opensource-windows-x86-mingw530-5.7.0(原来用Qt 5.2.1+完成的工程) 注:Qt下载链接http://download.qt.io/official_releases/qt/ 二、新建工程 见文章开头的博客链接。注意修改 .pro 文件 #------------------------------------------------- # # Project created by QtCreator 2016-12-03T18:32:29 # #------------------------------------------------- QT += core gui network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = udpEndpoint2 TEMPLATE = app SOURCES += main.cpp\

Qt开发的UDP发送端

喜夏-厌秋 提交于 2020-03-02 05:31:44
一、准备 (一)开发环境 系统:Windows 7 专业版(64位) 软件:qt-opensource-windows-x86-mingw530-5.7.0(原来用Qt 5.2.1+完成的工程) 注:Qt下载链接http://download.qt.io/official_releases/qt/ (二)知识准备 Qt 5入门请看书籍 《C++ Qt5 范例开发大全 》 (可通过网络搜索,也可以通过Qt交流QQ群获得)。 Qt创建工程请看百度教程: http://jingyan.baidu.com/article/7908e85c95d538af491ad274.html 网络传输协议知识,请自行脑补! 二、开发过程 (一)创建Qt 工程,命名udpEndpoint1(任何名字都可以,只要符合Qt文件命名规则) 创建没有严格按照步骤一步步来,就点一下关键的地方。 1. 选择 QWidget 基类 2. 创建完成 (二)打开 udpEndpoint1.pro ,找到代码行,就在正文第一行 QT += core gui 右边加上“ network ”,这一步非常重要,这样才能加载Qt中与网络有关的库(这是我自己的理解,不专业),不然后面程序运行会报错。修改如下: QT += core gui network 注:请注意一下.pro的内容和工程文件中头文件和源文件下的文件,后文中会用到。

Android “adb forward”端口映射

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-02 04:34:19
简析adb的端口映射功能,将PC端的某端口数据重定向到手机端的一个端口 ================================================ 曾经以为adb forward是个好东东,因为通过这个映射之后,在PC和设备之间就可以直接socket通信了。可现在终于发现,世界不是完美的。 Android Debug Bridge设计的目的,一是用来管理所有连接的设备;二是提供各种服务,供PC端有效的控制设备。主要包括三个部分: 1) ADB-server 运行在PC端,是一个始终在后台运行的进程,作为与手机端交互的唯一接口。ADB-server处理ADB-client的请求,一部分请求无须与 设备交互,直接在PC本地完成;剩下的请求需要与设备端的adbd交互,ADB-server起到了一个switcher的作用。 2) ADB-client 运行在PC端,可以同时存在多个。每个ADB-client由用户启动,完成多种功能。其作用是与ADB-server交互,实现用户请求的功能。 3) adbd 运行在设备端的常驻进程,同时只存在一个。作用是接收PC端的ADB-server发来的请求,并作出对应操作。 这三个可执行程序都是同一套代码编译出来的,位于<Android Source Dir>/system/core/adb/ ADB-client和ADB

[翻译完成] 树莓派搭建Google TV

落爺英雄遲暮 提交于 2020-03-02 04:28:49
Google TV是啥玩意 ? Google TV是支持自选图像、宽带网络、传统电视信号的综合平台,更附带电视节目搜索功能. 谷歌公布了其新版电视的两个版本, 第一个叫做Buddy Box, 由索尼代工的电视盒并且价格昂贵, 第二个是即将发布的集成电视, 将其电视盒内置到电视机内部. Google TV界面预览: 开发者: 可以为Google TV开发新的网页应用或者把已有的android应用改为适配大尺寸屏幕, 在谷歌的开发者 网站 可以看到详细介绍 搭建我们自己的Google TV 极客们就是喜欢重复发明轮子, 并且自得其乐. 所以我们使用下列开源技术来搭建我们自己的Google TV: 硬件: 树莓派 软件: Raspbian 系统 – 为树莓派特殊定制的Debian发行版 NodeJs Socket.io – 通过websocket远程连接TV Express – 用来处理一些基本的http请求 Omxcontrol – 用来控制树莓派上最棒的视频播放器OMXPlayer Chromium 浏览器 OMXPlayer Youtube-dl – 一个下载youtube视频的脚本 QuoJS – 在手机网页上处理滑动手势 HTML5, CSS3, Javascript, 和 Moustache 模板引擎 Youtube API 最终效果 树莓派TV及其特殊的远程遥控器 步骤

Part7 - Socket编程

和自甴很熟 提交于 2020-03-02 03:05:43
本节内容 1.Socket 编程 2. Socket多连接实现 3. 动态导入 4. 断言 一、Socket编程 Socket(TCP和UDP协议的封装) Socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递。 Socket Families(地址簇) 网络层 socket.AF_UNIX unix本机进程间通信(默认进程间不可通信) socket.AF_INET  IPV4  socket.AF_INET6 IPV6 Socket Types(协议) 传输层 socket.SOCK_STREAM for tcp socket.SOCK_DGRAM for udp socket.SOCK_RAW 原始套接字,利用它可以通过IP_HDRINCL套接字选项由用户构造IP头。 socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。 socket.SOCK_SEQPACKET 废弃了 服务端 import socket,os,time server = socket.socket() # 实例化服务端, 设定协议和地址簇,默认 family=AF_INET, type=SOCK_STREAM server.bind(( 'localhost' ,9999) ) # 绑定监听端口 server.listen()

python基础之socket与socketserver

我怕爱的太早我们不能终老 提交于 2020-03-02 02:56:50
---引入 Socket的英文原义是“孔”或“插座”,在Unix的进程通信机制中又称为‘套接字’。套接字实际上并不复杂,它是由一个ip地址以及一个端口号组成。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座(ip地址)的房间,每个插座有很多插口(端口),通过这些插口接入电线(进程)我们可以烧水,看电视,玩电脑…… 应用程序通常通过"套接字"向网络发出请求或者应答网络请求 。 套接字的作用之一就是用来区分不同应用进程,当某个进程绑定了本机ip的某个端口,那么所有传送至这个ip地址上的这个端口的所有数据都会被内核送至该进程进行处理。 ---python中的socket Python 提供了两个基本的 socket 模块。 第一个是 Socket,它提供了标准的 BSD Sockets API。 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。 ----socket 先来说第一个。 我们知道,现在的应用程序大多为C/S架构,也就是分为客户端/服务器端。   服务器端:服务器端进程需要申请套接字,然后自己绑定在这个套接字上,并对这个套接字进行监听。当有客户端发送数据了,则接受数据进行处理,处理完成后对客户端进行响应。   客户端:客户端则相对简单些,客户端只需要申请一个套接字,然后通过这个套接字连接服务器端的套接字

多线程笔记 - 伪异步IO

北战南征 提交于 2020-03-01 16:24:58
BIO的时候, 一个客户端对应服务器的一条线程, 比较耗线程资源. 在此基础上, 对起线程进行优化, 创建一个线程池, 对线程进行管理, 可以设置一个最大线程数 maxThreadCount. 这样, 达到线程可控的目的. 即使外面有远大于线程数的连接过来, 也不至于让服务器撑爆. 多出的客户端, 就进入线程池的队列中排队. 伪异步IO 是Netty权威指南里面提到的, 并不是一个公认的说法或者官方的说法 . 这里只需要修改服务端的代码即可: server: public class Server implements Runnable { private Socket socket; public Server(Socket socket) { this.socket = socket; } @Override public void run() { BufferedReader in = null; PrintWriter out = null; try { in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); System.out.println("server : 客户端接入

多线程笔记 - BIO

无人久伴 提交于 2020-03-01 15:53:58
BIO BIO 是一种同步阻塞模式, 只要有一个客户端接入, 服务器就会有一条线程与之对应, 进行通信. 以前的一种常用做法是, 服务器端起一条线程, 进行监听, 当监听到客户端接入后, 新起一条线程, 专门与客户端进行通信. 如果线程不够用了, 就不能建立连接了. 客户端只能等待. 同步说的其实是 一根筋, 只干一件事情, 比如执行io操作时, 也必须等待, 当 io 执行完后, 才可以继续执行后面的操作. 如果是异步的话, 执行io操作, 就可以交给其他程序执行, 主线程接着执行别的任务, 干别的事情. 当io执行完后, 通知我拿结果就行. 阻塞说的是, 我如果只有100个线程, 那就只能建立100个连接, 如果每个连接都满了, 其他的客户端就接不进来. 非阻塞可以理解为, 来者不拒. 就像服务大厅, 你来了, 领个号码(注册), 坐着等就行, 等叫号叫到你, 你就可以执行连接后续的逻辑. 对服务器来说, 你来了, 就接进来了, 不会拒绝你. server: public class Server implements Runnable { private Socket socket; public Server(Socket socket) { this.socket = socket; } @Override public void run() {

socket套接字的学习与简单应用

a 夏天 提交于 2020-03-01 10:46:26
socket套接字 Socket又称为套接字,它是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口提高了效率 socket就是一个模块。我们通过调用模块中已经实现的方法建立两个进程之间的连接和通信。也 为什么存在socket抽象层? 如果直接与操作系统数据交互非常麻烦,繁琐,socket对这些繁琐的的操作高度的封装,简化. socket在python中就是一个模块. 基于文件类型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族 套接字家族的名字:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET) tcp链接+循环 通信 服务端常驻 server端 import socket phone=socket.socket()#买手机 phone.bind(('127.0.0.1',6666))#绑卡 phone.listen(5)

粘包的原理与解决

徘徊边缘 提交于 2020-03-01 10:45:37
粘包现象 须知:只有TCP有粘包现象,UDP永远不会粘包 粘包不一定会发生 如果发生了:1.可能是在客户端已经粘了       2.客户端没有粘,可能是在服务端粘了 所谓粘包问题主要还是因为接收方不知道消息之间的界限 还有系统缓存区的问题 时间差的原因,不知道一次性提取多少字节的数据所造成的。 socket收发消息的原理 什么是缓冲区 输入输出缓冲区的默认大小一般都是 8K,可以通过 getsockopt() 函数获取:1024字节=1k 缓冲区的作用? 存储少量数据 如果你的网络出现短暂的异常或者波动,接收数据就会出现短暂的中断,影响你的下载或者上传的效率. 但是 凡是都是双刃剑,缓冲区解决了上传下载的传输效率的问题,带来了黏包问题. 为什么出现粘包? 第一种.连续短暂的send多次(数据量很少),你的数据会统一发送出去, (不可控) 第二种: send的数据过大,大于对方recv的上限时,对方第2次recv时,会接收上一次没有recv完的剩余的 1,接收方没有及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)** recv会产生黏包(如果recv接受的数据量(1024)小于发送的数据量,第一次只能接收规定的数据量1024,第二次接收剩余的数据量) 2,发送端需要等缓冲区满才发送出去