教程27国产编程语言CbrotherSocket模块
CBrother提供了一个Socket扩展,它可以作为tcp服务器与客户端使用,也可以作为udp服务器与客户端使用。 TcpModule
TcpModule在windows下使用的是IOCP,在linux下使用的是epoll,在macOS下使用的是poll模型。 ·TcpModule接口
函数
描述
参数
用法
setTcpAction(actobj)
设置响应接口
actobj:响应对象
tcpModule.setTcpAction(actobj)
start()
启动服务,返回true表示启动成功
无
tcpModule.start()
stop()
停止服务
无
tcpModule.stop()
setThreadCount(cnt)
设置工作线程数量
默认5个
可以大到CPU核数*3
但是消耗资源增多
cnt:响应线程数量
tcpModule.setThreadCount(8)
setMaxConnectCount(cnt)
设置最大连接数
cnt:数量,根据需求设置
过大了开销资源很大
默认2048
tcpModule.setMaxConnectCount(5000)
setSockNormalBuflLen
(recvLen,sendLen)
设置socket接收缓冲和发送缓冲默认值
recvLen:接收缓冲
sendLen:发送缓冲
默认4096
tcpModule.setSockNormalBuflLen(1024*10,1024*15)
addListenPort(port,listen_ip)
添加监听端口和IP
可以同时监听多个端口
port:监听端口
listen_ip:监听IP
默认0.0.0.0表示IPV4全IP
::表示IPV6全IP
*表示IPV6与IPV4兼容的全IP
tcpModule.addListenPort(6060)
tcpModule.addListenPort(6061,"*")
connect(ip,port)
主动连接某TCP服务器,成功返回socketid,失败返回-1
ip:ip地址,port:端口
tcpModule.connect("127.0.0.1",6060)
sendData(socketid,str)
发送数据,返回true为成功
socketid:socket标示
str:字符串
tcpModule.sendData(socketid,"hello")
sendData(socketid,byteArray,len)
发送数据,返回true为成功
socketid:socket标示
byteArray:ByteArray对象
len:发送长度,不传将发送byteArray所有数据
tcpModule.sendData(socketid,byteArray)
tcpModule.sendData(socketid,byteArray,10)
closeSocket(socketid)
关闭socket,返回true为成功
socketid:socket标示
tcpModule.closeSocket(socketid)
getRemoteIP(socketid)
获取socket对端IP
socketid:socket标示
var ip = tcpModule.getRemoteIP(socketid)
setSockBuflLen
(socketid,recvLen,sendLen)
设置socketid接收缓冲和发送缓冲大小
socketid:socket标示
recvLen:接收缓冲
sendLen:发送缓冲
不设置用默认的
只能在OnAccept和OnConnect里调用
tcpModule.setSockBuflLen(socketid,10*1024,10,1024)
getSocketCount()
获取当前管理的socket数量
无
var cnt = tcpModule.getSocketCount()
openLog(logname)
打开日至
在工程跟目录建立log目录
默认关闭,建议打开
日志文件名称
tcpModule.openLog("serv")
setSocketAction ,setThreadCount ,setMaxConnectCount ,setSockNormalBuflLen ,addListenPort 要在start 之前调用。·TcpModule 响应Action类可以有如下接口
function OnAccept(sock) ,有新的连接。
function OnClose(sock) ,连接断开。
function OnRecv(sock,byteArray,len) 接收到数据。
function OnSend(sock,len) 发送成功。
function OnConnect(sock) 主动连接对端成功。
这个方法会被多线程调用,如果要访问公共资源需要加锁。但对于同一个socket而言,OnRecv是串行的。 ·TcpModule 例子
服务器例子 import CBSocket.code class TcpAction { var tcpModule; function OnAccept(sock) { print "accept " + sock; } function OnClose(sock) { print "onclose " + sock; } function OnRecv(sock,byteArray,len) { print "onrecv " + sock + " " + byteArray.readString() + " len:" + len; var byteArray = new ByteArray(); byteArray.writeString("hello tcp client"); tcpModule.sendData(sock,byteArray); } function OnSend(sock,len) { print "onsend " + sock + " " + len; } } function main(parm) { var tcpModule = new TcpModule(); var tcpAction = new TcpAction(); tcpAction.tcpModule = tcpModule; tcpModule.setTcpAction(tcpAction); //设置TCP处理类 tcpModule.addListenPort(6060); //监听6060端口 tcpModule.addListenPort(6061,"*"); //监听6061端口,IPV4和IPV6兼容 tcpModule.start(); while(1) //主线程不能退出 { Sleep(1000); } }
客户端例子 import CBSocket.code class TcpAction { var tcpModule; function OnClose(sock) { print "onclose " + sock; } function OnRecv(sock,byteArray,len) { print "onrecv " + sock + " " + byteArray.readString() + " len:" + len; } function OnSend(sock,len) { print "onsend " + sock + " " + len; } function OnConnect(sock) { print "onconnect " + sock; var byteArray = new ByteArray(); byteArray.writeString("hellp tcp server!"); tcpModule.sendData(sock,byteArray); } } function main(parm) { var tcpModule = new TcpModule(); var tcpAction = new TcpAction(); tcpAction.tcpModule = tcpModule; tcpModule.setTcpAction(tcpAction); //设置TCP处理类 tcpModule.start(); tcpModule.connect("127.0.0.1",6060); while(1) //主线程不能退出 { Sleep(1000); } }
客户端结果如下: onconnect 131072 onsend 131072 18 onrecv 131072 hello tcp client len:17
服务端结果如下: accept 131072 onrecv 131072 hellp tcp server! len:18 onsend 131072 17 UdpModule·UdpModule接口
函数
描述
参数
返回值
用法
setUdpAction(actobj)
设置响应接口
actobj:响应对象
无
udpModule.setUdpAction(actobj)
start()
启动服务
无
true:启动成功
udpModule.start()
stop()
停止服务
无
无
udpModule.stop()
setRecvBufLen(recvLen)
设置最大接收数据包大小
recvLen:接收缓冲
默认4096
无
udpModule.setRecvBufLen(1024*10)
listen(port,listen_ip)
添加监听端口和IP
可以同时监听多个端口
port:监听端口
listen_ip:监听IP
默认0.0.0.0表示IPV4全IP
::表示IPV6全IP
*表示IPV6与IPV4兼容的全IP
无
udpModule.listen(6060)
udpModule.listen(6061,"*")
connectSendTo(ip,port,data)
主动对某UDP服务发送数据
ip:ip地址,port:端口
data:数据ByteArray对象
true为发送成功
udpModule.connectSendTo("127.0.0.1",6060,byteArray)
sendData(socketid,ip,port,data)
发送数据
socketid:socket标示
data:string或者ByteArray
true为成功
udpModule.sendData(socketid,ip,port,byteArray)
closeSocket(socketid)
关闭socket
socketid:socket标示
true为成功
udpModule.closeSocket(socketid)
openLog(logname)
打开日至
在工程跟目录建立log目录
默认关闭,建议打开
日志文件名称
无
udpModule.openLog("serv")
setSocketAction ,setThreadCount ,setMaxConnectCount ,setSockNormalBuflLen ,addListenPort 要在start 之前调用。·UdpModule 响应Action类可以有如下接口
function OnClose(sock) socket关闭
function OnRecv(sock,ip,port,byteArray,len) 接收到数据。
这个方法会被多线程调用,如果要访问公共资源需要加锁。 ·UdpModule 例子
服务器例子 import CBSocket.code class UdpAction { var udpModule; function OnClose(sock) { print "onclose " + sock; } function OnRecv(sock,ip,port,byteArray,len) { print "onrecv " + sock + " " + ip + " " + port + " " + byteArray.readString() + " len:" + len; var byteArray = new ByteArray(); byteArray.writeString("hello udp client"); udpModule.sendData(sock,ip,port,byteArray); } } function main(parm) { var udpModule = new UdpModule(); var udpAction = new UdpAction(); udpAction.udpModule = udpModule; udpModule.setUdpAction(udpAction); //设置UDP处理类 udpModule.start(); udpModule.listen(6060); //监听6060端口 udpModule.listen(6061,"*"); //监听6061端口,IPV4和IPV6兼容 while(1) //主线程不能退出 { Sleep(1000); } }
客户端例子 import CBSocket.code class UdpAction { var udpModule; function OnClose(sock) { print "onclose " + sock; } function OnRecv(sock,ip,port,byteArray,len) { print "onrecv " + sock + " " + ip + " " + port + " " + byteArray.readString() + " len:" + len; } } function main(parm) { var udpModule = new UdpModule(); var udpAction = new UdpAction(); udpAction.udpModule = udpModule; udpModule.setUdpAction(udpAction); //设置TCP处理类 udpModule.start(); var byteArray = new ByteArray(); byteArray.writeString("hello udp server"); udpModule.connectSendTo("127.0.0.1",6060,byteArray); while(1) //主线程不能退出 { Sleep(1000); } }
客户端结果如下: onrecv 131072 127.0.0.1 6060 hello udp client len:17
服务端结果如下: onrecv 131072 127.0.0.1 50332 hello udp server len:17
宋PLUS新能源售14。68万元起欢迎试驾驭见皆引领!全球首款宽体超混SUV领航上市!宋PLUSDMi上市价14。68万起(综合补贴后)创新采用骁云插混专用1。5L高效发动机高效EHS电混系统,达到短途用电经济节省,长途用
海豚售价9。38万元起欢迎莅临赏鉴纯电新物种海豚正式上市!综合补贴后售价9。38万元12。18万元!海豚是海洋车系的首款车型,也是首款采用海洋美学设计理念的车型,首款基于e平台3。0打造的车型。搭载DiLink3。
海豚售价9。38万元起欢迎莅临赏鉴纯电新物种海豚正式上市!综合补贴后售价9。38万元12。18万元!海豚是海洋车系的首款车型,也是首款采用海洋美学设计理念的车型,首款基于e平台3。0打造的车型。搭载DiLink3。
宋PLUS新能源售14。68万元起欢迎试驾驭见皆引领!全球首款宽体超混SUV领航上市!宋PLUSDMi上市价14。68万起(综合补贴后)创新采用骁云插混专用1。5L高效发动机高效EHS电混系统,达到短途用电经济节省,长途用
克来机电国内汽车电子机器人龙头,历史新高在望选股理由业绩大幅增长新股即将创历史新高成交量持续放大证券简称克来机电评级BBB数据截止日期2019年9月30日单位亿元证券代码603960成立日期2003年所在地上海一主营业务主营
3999起!TCLXESS智屏正式发布TCL今天在深圳正式发布了XESS智屏产品,其配备了55英寸4K分辨率屏幕,开机无广告,创新提供了非常多与手机交互的特色功能。现场演示了以下几个Demo1未开机状态下,直接语音呼叫
泛微网络定制化OA软件龙头,好的很透明估值是核心选股理由营收利润双增长近期股价创历史新高证券代码603039评级A数据截止日期2019年12月31日单位亿元成立日期2001年所在地上海一主营业务主营业务向企业事业单位和政府机构提
中孚信息保密防护领域后起之秀,依靠大客户实现高速增长选股理由营收及净利润大幅增长股价近期创新高证券代码300659评级BBB数据截止日期2019年12月31日单位亿元成立日期2002年所在地山东济南一主营业务主营业务信息安全产品研发
华利集团全球第二大制鞋厂,智能化生产助力公司业绩稳定增长独立客观第三方研究,为您筛选优质上市公司证券代码300979综合评级AA一主营业务评分751业务分析公司是一家从事运动鞋履代工的企业,以生产运动休闲鞋为主(毛利率较高),户外靴鞋运
山石网科信息安全后起之秀,领先技术静待行业裂变选股理由营收净利润增长网络安全技术领先科创板证券代码688030评级A数据截止日期2019年9月30日单位亿元成立日期2011年所在地江苏苏州一主营业务主营业务生产研发网络安全领域
博通集成数传音传芯片龙头技术过硬口碑不佳亟需突破成长瓶颈选股理由芯片营收利润增长证券代码603608评级BB数据截止日期2019年12月31日单位亿元成立日期2004年所在地上海一主营业务主营业务无线通讯集成电路芯片的研发与销售,分为无
Python一行代码的神奇之处作者潮汐来源Python技术你们知道今天聊聊关于Python一行代码的神奇之处!!!十六进制转十进制decimalint(1010,5)print(decimal)130输出130
移动端自动化AutoJS快速入门指南(上)来源AirPython作者星安果1。前言大家好,我是安果!之前写过很多App端自动化的文章,大都基于AppiumAirtest无障碍服务等技术来实现的其中,Appium和Airte
做时间的朋友,必须知道收益咋算作者太阳雪来源Python技术比起对时间精力的投资,对金钱的投资更容易理解和显现那么面对纷繁复杂的投资种类,哪个才是对我们有利的呢?当然要看收益率高呀那如何计算收益率呢?年化复合回
破茧成蝶,沃可以6月1日,人民日报发布了一起走过十年,归来仍是少年的短视频,从少年的角度见证了我国十年来的伟大成就,这个视频让人看着感觉很激动,同时也想起来很多儿时的梦想,都实现了吗?在不久前的过
福特中国重新排兵布阵,高层调整并新设立两大事业部昨晚,福特中国和江铃汽车均发布重磅消息,宣布福特对在华业务运营的管理模式进行全新调整新设立乘用车事业部与商用车事业部,并任命相关负责人。与此同时,福特对旗下两个合资公司长安福特与江
布马网络未来的营销是品牌的战争,中小企业应尽早树立品牌意识编者按互联网时代改变了人们接受信息的方式,搜索引擎社交软件的使用,让网络营销的价值和意义不断放大。短视频新媒体内容等新型营销方式的出现,让网络营销的覆盖面和覆盖率不断增加。中小型企
真无线蓝牙耳机进入战国时代,四大势力瓜分千亿级市场2018年2019年上半年,真无线蓝牙耳机行业经过残酷的肉搏,竞争局势也渐渐明朗,四股主要的品牌势力跑到了第一梯队,抢到了下一轮竞争的入场券,也宣告了真无线蓝牙耳机行业正式进入战国
比亚迪六月刚霸榜中国新能源销冠如今再度登陆全球新能源销冠本年6月份的时候,比亚迪在夺得中国新能源汽车市场销冠后,没有停止前进的脚步。不仅在自主品牌展现出亮眼的成绩,也拥有领跑全球新能源汽车消费市场的底气。以近期EVsales公布的最新全
SAP收购的一家云软件供应商要上市了估值120亿美元Qualtrics这家云软件供应商周一向美国证交会(SEC)提交了文件,准备作为一家独立公司继续运营。两年前这家公司就准备IPO,但SAP在上市前夕收购了这家云软件供应商。Qual
苹果造车让制造雷达传感器的公司高潮周一,两家制造激光雷达传感器的公司股价飙升,此前路透社报道称,苹果公司计划最早在2024年开始为消费者生产苹果品牌汽车。苹果公司与潜在的激光雷达供应商进行了谈判,但该公司也在研究制
不负外界过高的期望AMD企业业务飙涨176在于英特尔的竞争中处在上风之后,AMD在之前公布财报显示其营收和获利超过华尔街对这家芯片制造商已经很高的预期。AMD本季度营收32。4亿美元,而华尔街预期为估计是30。3亿美元。A