一些socket的编程经验

MTK 10A socket编程相关经验分享 <br />     最近在做一个socket编程的模块,本来以为从展讯平台把相关的东西移植到MTK10A上就可以了,但是移植过程中碰到了许多的问题,导致了陆陆续续将近弄了3个月,才将这个下载的模块,改的相对稳定了点。虽然现在还在加断点续传、下载管理、文件上传的功能,但应该已经算后一阶段的事了,故先写个总结,总结这段时间里,碰到的问题,以及解决的方法。<br />      我还是根据我这个socket模块的流程来讲这些吧。<br />1.建立相关的数据账号<br />      在MTK中,要想建立相关的 阅读详情

没有逐条实践,先收藏,欢迎交流。

转自:http://hi.baidu.com/heixinghai/blog/item/22b1ef02f1f420e408fa9382.html

1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:

BOOL bReuseaddr=TRUE;

setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));

 

2.  如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:

BOOL bDontLinger = FALSE;

setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));

 

3. 在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:


int nNetTimeout=1000; //1秒

//发送时限

setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));


//接收时限

setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));

 

4. 在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节(异步);
系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据和接收
数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发:


// 接收缓冲区

int nRecvBuf=32*1024;//设置为32K

setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));


//发送缓冲区

int nSendBuf=32*1024;//设置为32K

setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

 

5. 如果在发送数据的时,希望不经历由系统缓冲区到socket缓冲区的拷贝而影响程序的性能:

int nZero=0;

setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));

 

6. 同上在recv()完成上述功能(默认情况是将socket缓冲区的内容拷贝到系统缓冲区):

int nZero=0;

setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));

 

7. 一般在发送UDP数据报的时候,希望该socket发送的数据具有广播特性:

BOOL bBroadcast=TRUE;

setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL));

 

8. 在client连接服务器过程中,如果处于非阻塞模式下的socket在connect()的过程中可以设置
connect()延时,直到accpet()被呼叫(本函数设置只有在非阻塞的过程中有显著的作用,在阻塞
的函数调用中作用不大)

BOOL bConditionalAccept=TRUE;

setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bConditionalAccept,sizeof(BOOL));

 

9. 如果在发送数据的过程中(send()没有完成,还有数据没发送)而调用了closesocket(),以前我们

一般采取的措施是"从容关闭"shutdown(s,SD_BOTH),但是数据是肯定丢失了,如何设置让程序
满足具体应用的要求(即让没发完的数据发送出去后在关闭socket)?

struct linger {

u_short    l_onoff;

u_short    l_linger;

};

linger m_sLinger;

m_sLinger.l_onoff=1;//(在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)


// 如果m_sLinger.l_onoff=0;则功能和2.)作用相同;

m_sLinger.l_linger=5;//(容许逗留的时间为5秒)

setsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger));


Note:
     1.   在设置了逗留延时,用于一个非阻塞的socket是作用不大的,最好不用;

     2.   如果想要程序不经历SO_LINGER需要设置SO_DONTLINGER,或者设置l_onoff=0;

 

10. 还一个用的比较少的是在SDI或者是Dialog的程序中,可以记录socket的调试信息:

(前不久做过这个函数的测试,调式信息可以保存,包括socket建立时候的参数,采用的

具体协议,以及出错的代码都可以记录下来)

BOOL bDebug=TRUE;

setsockopt(s,SOL_SOCKET,SO_DEBUG,(const char*)&bDebug,sizeof(BOOL));

 

shellsocket:简单的 Go TCP Server 将 bash 绑定到套接字 壳套接口 简单的 Go TCP Server 将 bash 绑定到套接字 开始 Allans-MacBook-Pro$ ./shellsocket -p=2222 用法: Allans-MacBook-Pro$ telnet localhost 2222 Trying ::1... Connected to localhost. Escape character is '^]'. # ls /tmp README.md shellsocket shellsocket.go # date Sat May 2 14:05:23 EDT 2015 # exit 立即下载

相关推荐

linux 下的shell socket实现聊天室

管道实现socket,资源资源包含服务器端和客服端。

shell建立socket连接

建立socket的两种方式 udp:/dev/udp/host/port tcp:/dev/tcp/host/port 直接重定向当前shell的一个文件描述符到对应的ip/端口: exec 8<>/dev/udp/10.0.2.15/12345 就相当于建立一个UDP socket。 发送报文: echo “” >&8 使用tcpdump抓包: 00:48:18.291...

任我行的博客 6092

智能座舱语音测试避坑指南:从唤醒率到方言识别,这些场景你测全了吗?

本文深入解析智能座舱语音测试的关键场景与避坑指南,涵盖唤醒率测试、方言识别、多音区交互等复杂场景。通过实战案例与自动化测试方案,帮助开发者全面提升语音系统的可靠性与用户体验,特别关注环境噪声干扰与方言覆盖策略。

weixin_42613501的博客 497

网络基础学习系列二(socket编程)

socket编程

sakeww的博客 1010

DDR3性能优化实战:如何用Xilinx MIG控制器实现800MHz稳定读写(7系列FPGA版)

本文深入探讨了在Xilinx 7系列FPGA上使用MIG控制器实现DDR3存储器800MHz稳定高速读写的实战优化技巧。文章聚焦于高级时序调优、Bank Machine调度策略、用户接口设计优化以及利用ILA进行信号完整性调试,旨在帮助工程师突破性能瓶颈,实现接近理论峰值的稳定带宽,并为进一步冲刺更高频率提供进阶调参指南。

seed的博客 778

Unity 工具 之 Natcorder 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端)

Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 目录 Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 一、简单介绍 二、插件导入使用 三、几个 Demo 演示效果 四、关键代码 五、下载地址 一、简单介绍 Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。 本节介绍,使用Unity插件,进行屏幕录制,生成图片,gif 动图,以及mp4文件等;能录制场景,也能录制摄像头,多功能录

仙魁XAN 7559

【Shell】通过shell脚本调用tcp/udp socket

bashshell的内置功能之一是通过/dev/tcp和/dev/udp设备文件打开TCP / UDP套接字。 以下介绍如何在shell中使用tcp/udp socket 在Bash Shell中打开或关闭TCP / UDP套接字 语法: $ exec {file-descriptor} </ dev / {protocol} / {host} / {port} fi...

R_W_zhang的博客 5481

ptrade量化策略之沪深300指数增强

本策略的核心是在沪深300股票池中选股,选择的股票都是市值比较大,业绩比较好的白马股,根据市场相对位置以及基本面因子来选择股票

qq_29301281的博客 1191

Linux系统shell查看SOCKET情况和socket编程概述

Linux系统中,查看SOCKET使用情况可以使用ss命令。 1、命令格式: ss [参数] ss [参数] [过滤] 2、命令功能: ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是...

$好记性还是要多记录$ 4389

GD32F4x芯片加密实战:从读保护到安全启动全解析

本文详细解析了GD32F4x芯片加密的实战操作,从读保护功能到安全启动全流程。通过具体代码示例和应用场景分析,帮助开发者有效防止固件被盗用,提升工业控制、智能门锁等场景下的数据安全性。重点介绍了读保护功能的底层机制、配置步骤及常见问题解决方案。

weixin_42629671的博客 207

强化学习入门8—深入理解DDPG

本文是强化学习入门系列的第八篇,前面我们讲Actor-Critic时提到了DDPG。DDPG是google DeepMind团队提出的一种用于输出确定性动作的算法,它解决了Actor-Critic 神经网络每次参数更新前后都存在相关性,导致神经网络只能片面的看待问题这一缺点。同时也解决了DQN不能用于连续性动作的缺点。

小菜羊的博客 4315

《Linux学习笔记》:Linux操作系统

linux内有7种文件 -、d、c、b、l、p、s(socket)Shell 用户与内核沟通的工具。

小囧豆豆的博客 428

Android oom_adj 更新原理(一)

通过之前的两篇博文《lmkd 机制详解》和《lmkd中adj score的算法剖析》中,根据计算出来的 min_score_adj 选择大于该值的 oom_adj 的进程进行 kill 处理。oom_adj 随着应用状态的不同其值也是伴随着变化的。本文将通过源码剖析 oom_adj 更新的原理。

私房菜 2655

Socket编程经验总结

Socket编程经验总结一些不错的资料: http://www.vckbase.com/document/viewdoc/?id=1375深入 CSocket 编程之阻塞和非阻塞模式 超时,阻塞设置:http://www.cnblogs.com/paker/archive/2005/11/28/286426.html CAsyncSocket设置超时的方法:http://www.qqgb...

ustcfxx的专栏 177

量化交易 米筐 案例:市值因子选股策略

案例:市值因子的选股策略 1.结果 获得超额收益 年化 49% 2. 从股票中选择市值小的股票 选定财务数据筛选 进行每日调仓(多因子选股调仓 周期频率会小一些) 3. 代码 估值有关指标 # 在沪深300股票中,选出市值比较小的10只股票 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。 def init(context): # 沪深300组合 stocks = index_components('000300.XSHG') # 沪深3

廷益_飞鸟的博客 2313

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SOCKET编程经验总结

1.设置非阻塞套接字 unsigned long ul = 1; ioctlsocket(socketFd, FIONBIO, &ul); //设置为非阻塞模式 2.TCP 粘包出现原因:在流传输中出现,UDP不会出现粘包,因为它有消息边界(参考Windows 网络编程) 1 发送端需要等缓冲区满才发送出去,造成粘包 2 接收方不及时接收缓冲区的包,造成多个包接收 详细出处:...

xiaoxiaoyu85的专栏 1101

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用SOCKET API进行编程的经验

  本文是我在进行MS-Windows、HP-Unix网络编程的实践过程中总结出来的一些经验,仅供大家参考。本文所谈到的Socket函数如果没有特别说明,都是指的Windows Socket API。  一、WSAStartup函数int WSAStartup(   WORD wVersionRequested,    LPWSADATA lpWSAData   );

鹏程万里--扬帆起航 905

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【开发经验】java socket编程详解

前言 ​ 在大多数的java项目中,使用开发者直接使用socket的场景并不多。但是目前众多框架的底层中,都会有socket的身影。此示例一下java原始的socket编程,并通过telnet进行通讯。 1、功能实现 如上图所示,主要实现服务器开启服务,每个客户端链接时都分配一个新的线程与其通讯。 2、服务端代码: import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.u

叁滴水 的博客 9642

Socket编程项目之后经验谈

我们的项目是用DotNet实现Socket连接,用多线程处理多用户。我就谈一下在实现过程中遇到的问题。下面是我服务器的简化实现。private Socket clientSocket;public void Start()  {      Thread  thread=new Thread(new ThreadStart(MainService));       thread.Start();  

nstorm的专栏 1541

Windows Socket 编程经验[转]

 一、WSAStartup函数view plaincopy to clipboardprint?int WSAStartup(      WORD wVersionRequested,       LPWSADATA lpWSAData      ); int WSAStartup(   WORD wVersionRequested,    LPWSADATA lpWSAData   );

维美技术 http://blog.youkuaiyun.com/lesen 509

Socket 网络编程实践经验

目录 目录 相关文章 Socket 与 HTTP 的区别 生产实践考虑 网络断开重连问题 Heartbeat 心跳机制 使用非阻塞模式下的 select 函数进行 Socket 连接检查 会话过期问题 同步还是异步问题 数据缓存问题 完全断开连接问题 相关文章 NOTE:本文假设你已经对 Socket 的使用...

weixin_33884611的博客 293

关于Socket编程项目之后经验谈

 我们的项目是用DotNet实现Socket连接,用多线程处理多用户。我就谈一下在实现过程中遇到的问题。下面是我服务器的简化实现。   private Socket clientSocket;      public void Start()   {   Thread thread=new Thread(new ThreadStart(MainService));   thread.S...

weixin_30807779的博客 187

socket编程近期经验总结

最近在做的一个小项目,难度不大,但是网络传输部分费了一点周折,在这里把近期的一些经验教训总结一下。因为是自己的一点心得,如果有疏漏,后面再补充修正。 程序使用TCP协议传输,先epoll_wait(其实连接不多,只是熟悉一下,结果确实学到了东西),然后进行接收。因为TCP有流量控制,会把大的流进行分片,所以一次recv并不能接收全部的数据,刚开始就先接收一个header,包含了流的长度,然后...

imyangjianwei的专栏 198

Socket编程项目经验谈

我们的项目是用DotNet实现Socket连接,用多线程 处理多用户。我就谈一下在实现过程中遇到的问题。下面是我服务器的简化实现。      private Socket clientSocket;   public void Start()   {   Thread thread=new Thread(new ThreadStart(MainService));...

javasee 285

关于MTK socket编程的一些经验

0.模拟器上,初始化需要先调用soc_init_win32() 1.监视MSG_ID_APP_SOC_NOTIFY_IND消息(SOC_WRITE,SOC_READ,SOC_CONNECT,SOC_CLOSE) 2.soc_create的最后一个参数:cmnet帐号默认是10,cmwap是14. 模拟器上随便都没问题.只要PC能上网. 3.soc_setsockopt  SOC_NBIO 设

sierllen的专栏 475
上一篇: Socket总结
下一篇: 非阻塞connect()
UU_Yang
博客等级 码龄23年 926粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值