socket

TCP/UDP常见问题小结

被刻印的时光 ゝ 提交于 2020-03-02 15:18:02
1,udp丢包 困扰几天的udp内网传输部分终于做通了,解决的关键就在于setsockopt的调用,设置接收缓冲。 遇到的问题是这样的,主机端发送udp数据包: 应用层的包大小为1452byte大小,这样拆包是根据以太网的MTU为1500字节而考虑的(当然外网状态下并不一定就是以太网网络,路由MTU可能更加小),因为在网络层和传输层还有8byte的udp包头和20byte的ip包头,所以以太网帧大小为1452+8+20 = 1480byte。 主机端(linux)现在接了11路视频数据,发送的数据量还是很大的,但经过测试,数据是可以发送出去的,发送端没有问题。我在客户端用一个线程专门接包,然后进行处理,可总是处理不过来,当连接路数比较多的时候,即码流增大时,出现接收不过来的情况。开始以为是主机端问题,进行写文件测试发现主机端完全可以承受11路数据的发送(udp数据包),而接收端对每个部分都进行了详细测试,都没有效率问题而影响接包的处理,最后将目光放在了接收缓冲的问题上,经过查证,windows程序默认的udp socket的接收和发送缓冲都是8kB, 而将接收缓冲调大后,马上解决了丢包现象: int n = 512*1024; setsockopt(m_hRcvSock, SOL_SOCKET, SO_RCVBUF, (const char*)&n, sizeof(n));

实战Linux Bluetooth编程(九) SDP层编程

て烟熏妆下的殇ゞ 提交于 2020-03-02 12:31:17
先前的章节谈过SDP协议。但没有具体讲如何编程。 BlueZ提供的SDP API,常见的如下: 1. sdp_session_t *sdp_create(int sk, uint32_t flags) 参数1:sk: socket 参数2:SDP flags. 取值如下: #define SDP_RETRY_IF_BUSY 0x01 #define SDP_WAIT_ON_CLOSE 0x02 #define SDP_NON_BLOCKING 0x04 创建一个新的Session为了异步查找。 Session结构如下: typedef struct { int sock; int state; int local; int flags; uint16_t tid; // Current transaction ID void *priv; } sdp_session_t; sdp_create 只是简单的创建一个空间将Session指针返回。并将sk和flags传入Session对应值。 同时,会创建transaction并将指针给 priv . struct sdp_transaction { sdp_callback_t *cb; void *udata; uint8_t *reqbuf; sdp_buf_t rsp_concat_buf; uint32_t reqsize;

实战Linux Bluetooth编程(五) Socket与Bluetooth

风流意气都作罢 提交于 2020-03-02 12:30:59
Linux下Bluetooth编程,借用了Socket体制。也就是说,BlueZ Kernel部分将Bluetooth协议栈以网络协议的形式添加进网络协议栈,这样极大的方便了用户编程。下面Sam就结合Socket概念将Linux Bluetooth做个研究。 1957年10月4日,星期五,苏联发射了人类历史上第一颗人造地球卫星--Sputnik.这标志着人类外太空时代的开始。这颗卫星篮球大小,在发射98分钟后到达运转轨道,可以通过短波40.002MHz收听到它的声音。这也标志着苏联在航天科技领域超过美国。但当时谁能想到,Sputnik的升空竟然促进了TCP/IP和Internel的出现。(Sam:不知道朝鲜那个轨道高度几百米的卫星会促成什么出现,嘿嘿)。被Sputnik所刺激的美国总统艾森豪威尔五星上将积极推动ARPA。又因为美国政府为了公平起见,每次采购计算机时都从不同设备制造商处购买。大家很快发现,各个计算机无法兼容。1962年,Licklider提出:各个计算机高度自治,但他们也应该能够相互通讯。这就是ARPA网,它成为Internel的前身。 一:理解Socket: 在使用手机与女朋友联系时,必须用手机拨她的号码,然后心情坎坷的等待她的应答。当双方通话时,就建立了一个具有两个端点的通信线路。 Linux中的Socket与电话非常相似。具体问题,稍后再分析。 二

Django框架导读

元气小坏坏 提交于 2020-03-02 12:29:44
一、虚拟环境 二、web架构 三、http协议 四、原生socket 五、http协议socket原理 六、响应路由原理   七、响应框架演变 八、项目演变模板渲染 一、虚拟环境   什么是虚拟环境?     对真实的python解释器的一个拷贝版本     是事实有效的,可以独立运行解释python代码     可以在计算机上拷贝多个虚拟环境   为什么要用虚拟环境?     保证真实环境的纯净性     框架的多版本共存     方便做框架的版本迭代     降低多框架共存的维护成本   安装虚拟环境步骤:     1.通过pip3安装虚拟环境:       --pip3 install virtualenv     2.前往目标文件夹:       --cd 目标文件夹(D:\viryualenv)     3.创建纯净虚拟环境:       --virtualenv 虚拟环境名(py3-env1)     4.终端启动虚拟环境:       --cd py3-env1\Scripts       --activate     5.进入虚拟环境下的python开发环境       --python3     6.关闭虚拟环境       --deactivate     7.PyCharm的开发配置       添加:创建项目 -> Project Interpreter -

Django框架导读

血红的双手。 提交于 2020-03-02 12:28:36
一:Django框架应用 1:web应用: 运行在浏览器上的应用 2:c/s,b/s架构   client/server:客户端服务器架构,c++   browser/server:浏览器服务器架构,java,Python   底层均是基于socket 3:Python web框架   a:socket b:页面路由 c:模板渲染   Django a用到wsgiref b自己写的 c 自己写的 功能全面   Flask a用的第三方 b自己写的 c自己写的 小而轻   Tornado a自己写的 b自己写的 c自己写的 支持高并发 二:原生socket服务 目录结构:   part1     -- index.html     -- server.py 基础socket服务: import socket # 利用socket建立服务器对象 server = socket.socket() # 设置ip和端口 server.bind(('127.0.0.1', 8001)) # 设置监听 server.listen(5) print('服务器设置成功') print('浏览器访问:http://127.0.0.1:8001') while True: # 阻塞等待客户端数据 client, address = server.accept() # 接收数据 data = client

Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR

巧了我就是萌 提交于 2020-03-02 10:02:30
from http://blog.csdn.net/feiyinzilgd/article/details/5894300 Linux 网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR. SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回. SO_LINGER选项则是用来修改这种默认操作的.于SO_LINGER相关联的一个结构体如下: [cpp] view plain copy print ? #include <sys/socket.h> struct linger { int l_onoff //0=off, nonzero=on(开关) int l_linger //linger time(延迟时间) } 当调用setsockopt之后,该选项产生的影响取决于linger结构体中 l_onoff和l_linger的值: 0 = l_onoff 当l_onoff被设置为0的时候,将会关闭SO_LINGER选项,即TCP或则SCTP保持默认操作:close立即返回.l_linger值被忽略. l_lineoff值非0,0 = l

socket编程小问题:地址已经被使用——Address already in use

…衆ロ難τιáo~ 提交于 2020-03-02 09:15:02
转自:http://blog.csdn.net/a_tu_/article/details/44625117 很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端socket后还是有这个问题。正如下面的这段简单的socket程序。 server.cpp 1 #include <sys/types.h> 2 #include <sys/socket.h> 3 #include <stdio.h> 4 #include <netinet/in.h> 5 #include <arpa/inet.h> 6 #include <unistd.h> 7 #include <stdlib.h> 8 9 #define BUFFER_SIZE 40 10 11 int main() 12 { 13 char buf[BUFFER_SIZE]; 14 int server_sockfd, client_sockfd; 15 int sin_size=sizeof(struct sockaddr_in); 16 struct sockaddr_in server_address; 17 struct sockaddr_in client_address; 18

socket编程:SO_REUSEADDR例解

一世执手 提交于 2020-03-02 09:01:18
网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用。而 且很多网友在编写网络程序时也会遇到这个问题。所以特意写了这么一篇文章, 希望能够解答一些人的疑难。 其实这个问题在Richard Stevens的《Unix网络编程指南》卷一里有很详细的 解答(中文版P166-168页)。这里我只是写几个基本的例子来验证这个问题。 首先声明一个问题:当两个socket的address和port相冲突,而你又想重用地 址和端口,则旧的socket和新的socket都要已经被设置了SO_REUSEADDR特性,只 有两者之一有这个特性还是有问题的。 SO_REUSEADDR可以用在以下四种情况下。 (摘自《Unix网络编程》卷一,即UNPv1) 1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启 动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。 2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但 每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可 以测试这种情况。 3、SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个soc ket绑定的ip地址不同。这和2很相似,区别请看UNPv1。 4、SO

socket编程:SO_REUSEADDR例解

﹥>﹥吖頭↗ 提交于 2020-03-02 09:00:35
网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用。而 且很多网友在编写网络程式时也会碰到这个问题。所以特意写了这么一篇文章, 希望能够解答一些人的疑难。 其实这个问题在Richard Stevens的《Unix网络编程指南》卷一里有很周详的 解答(中文版P166-168页)。这里我只是写几个基本的例子来验证这个问题。 首先声明一个问题:当两个socket的address和port相冲突,而您又想重用地 址和端口,则旧的socket和新的socket都要已被配置了SO_REUSEADDR特性,只 有两者之一有这个特性还是有问题的。 SO_REUSEADDR能够用在以下四种情况下。 (摘自《Unix网络编程》卷一,即UNPv1) 1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而您启 动的程式的socket2要占用该地址和端口,您的程式就要用到该选项。 2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但 每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可 以测试这种情况。 3、SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个soc ket绑定的ip地址不同。这和2很相似,区别请看UNPv1。 4、SO

Flash Socket通信的安全策略问题 843端口

烂漫一生 提交于 2020-03-02 07:57:22
1、问题描述 将flash发布为html格式后,加载页面后,swf无法与服务器进行socket通信。Flash端显示的错误为: securityErrorHandler信息: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"] 在服务器端显示的信息是由客户端尝试进行连接,但是无法接受数据。接受的数据显示为空。 2.问题原因: 最新的Flash player 9.0.124.0,当flash文件要进行socket通信的时候,需要向服务器端获取crossdomain.xml文件。如果找不到就出现客户端无法连接服务器的现象。 了解flash发起socket通信的三个过程 当封装在页面的flash发起socket通信请求的时候会先寻找服务器端的843端口,获取Crossdomain.xml文件,当服务器没有开启843的时候,flashPlayer会检查发起请求的swf文件中中有没有使用Security.loadPolicyFile来加载策略文件Crossdomain.xml,如果还是没有就会看这个发起请求的swf要连接的目标端口有没有策略文件。如果都没有那么连接失败,返回如上的出错提示。 为什么老版本的Flash