luasocket系列: luasocket tcp

luasocket  拓展库提供了tcp 模块,该模块提供一些操作,非常简单.但是不知道为什么源代码中的例子有错误.

简单写了一个luasocket tcp 协议的例子,代码如下:

tcpsample.lua 代码:

--绑定地址和端口号
host = host or "127.0.0.1"
port = port or 8080
--创建tcp对象,方式和udp创建类似,通过metatable 设置类方法
tcp =socket.tcp()
--绑定地址和端口号到指定tcp对象上
e=tcp:bind(host, port)
if(e and e==1)then
   print("Binding to host '" ..host.. "' and port " ..port.. "...")
else
   print("bind err")
end
i, p   = tcp:getsockname()
--监听绑定地址和端口号,排队设置为50
e =tcp:listen(50)
if(e and e ==1)then
   print("listen to host '" ..host.. "' and port " ..port.. "...")
else
   print("listen  err")
end
print("Waiting connection from talker on " .. i .. ":" .. p .. "...")
ctcp =nil
--等待一个客户端链接进来
while 1 do
   client = tcp:accept()
   print(client)
   if(client~=nil)then
      ctcp =client
      print("accept success")
      break
   else
      print("accept  err")
   end
end
--有客户端成功链接进来
print(ctcp)
while 1 do
    --阻塞,等待有至少10个字节进入
    revbuff=ctcp:receive(10)
	--向客户端发送数据
	ctcp:send("你好")
end

tcpsample.cpp代码如下:

extern "C"
{
	#include <lua.h>
	#include <lualib.h>
	#include <lauxlib.h>
	#include <luasocket.h>
}
//加入winsock库
#pragma comment(lib, "WS2_32")	// 链接到WS2_32.lib

int main( int argc, char *argv[] )
{
	lua_State* L = lua_open();

	luaopen_base(L);

	luaopen_socket_core(L);
	luaL_dofile(L, "tcpsample.lua");
	lua_close(L);
	return 0;
}

运行结果如下:

代码非常简洁,接下来的例子,我们将深入luasocket 源代码部分. 尤其对luasocket select IO模式的讲解.对select IO 模型不熟悉的,赶快充电..渍渍渍渍....

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 06:09:22

luasocket系列: luasocket tcp的相关文章

luasocket系列: luasocket hello world!

LuaSocket 简介: LuaSocket is a Lua extension library that is composed by two parts: a C core that provides support for the TCP and UDP transport layers, and a set of Lua modules that add support for functionality commonly needed by applications that de

Android网络编程系列 一 TCP/IP协议族

在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必要进一步的了解,这就要我们了解网络通信层了,提到网络通信层不得不说起ISO-OSI的七层协议经典架构,如图所示: 上图的左边部分就是osi架构模型了, ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标

Sweet Snippet系列 之 TCP数据接收

Sweet Snippet系列 之 TCP数据接收 一.引子 虽说仍然是Sweet Snippet,不过本篇并没有代码,纯粹是自己觉得有点趣味,就索性一记了~ 二. 问题 接触过网络编程的朋友大概都应知道TCP,作为一种"流"式协议,TCP的粘包问题一直都是程序处理的要点,而这次的问题就是,如果发送n字节的TCP数据,对端接收时会出现多少种接收情况? 三. 解法 我们先从具体的一个实例来简单算一算吧~就假设我们发送了3个字节的TCP数据: 由于TCP如果接收成功至少可以接收一个字节,所

协议系列之TCP协议

3.TCP协议 从上一节我们了解了什么是IP协议,以及IP协议的一些特性,利用IP协议传输都是单向的,不可靠的,无连接状态的.正是这些特性,于是便产生了TCP协议.TCP协议属于传输层,在IP协议网络层之上,竟然IP协议不可靠,那就必须要在其上多一个TCP协议以实现传输的可靠性.就像我们寄出一封信,如果对方不回信,不通过别的渠道告诉你,你永远都无法保证这封信能准确送到对方手上.同样,TCP协议采取了类似的措施来保证数据包的准确送达,它规定接收端发送一个确认数据包回来. 严格地说,TCP协议提供了

【转】TCP/IP 系列之 TCP 流控与拥塞控制(一)

原文地址:http://mrpeak.cn/blog/tcp-flow-control00/ TCP/IP 系列之 TCP 流控与拥塞控制(一) TCP 流控(flow control)与拥塞控制(congestion control),是我个人认为每个 iOS 工程师都应该熟悉的,价值含量极高的知识点.明白了三次握手,但是不了解流控和拥塞控制背后的设计原理,是不能够在简历上写「精通 tcp/ip」的. Flow control 和 congestion control 的学习价值高,而且学习过

Android网络编程系列 一 TCP/IP协议族之链路层

这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 数据链路层有三个目的: 为IP模块发送和 接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RARP请 求和接收RARP应答 ip大家都听说过.至于ARP和RARP,ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议,而RARP则叫做逆地址解析协议,在tcp/ip协议的后面章节会介绍它们(在局域网里面用ARP协议可以很容易的搞瘫痪网络哦) 数据链路层的协议还是很多的,有我们最常用的以太

Android网络编程系列 一 TCP/IP协议族之传输层

这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. 1.1.UDP协议头 1.2 UDP端口号 由于很多软件需要用到UDP协议,所以UDP协议必须通过某个标志用以区分不同的程序所需要的数据包.端口号的功能就在于此,例如某一个UDP程序A在系统中注册了3000端口,那么,以后从外面传

Android网络编程系列 一 TCP/IP协议族之网际层

这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 网际层包括:IP.ICMP.IGMP 以及处在网际层实际工作在链路层的 ARP 和 RARP等等协议. 1.IP协议 互联网上的每个接口必须有一个唯一的Internet地址(也称作IP地址).IP地址长32 bit.IP协议是TCP/IP协议的核心,所有的TCP,UDP,ICMP,IGMP的数据都以IP数据格式传输.要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议

协议系列之TCP/IP协议

根据前面介绍的几种协议,将IP协议.TCP协议.UDP协议组合起来,于是便有了TCP/IP协议.现在很多的应用的通信都是建立在TCP/IP协议的基础上,运用非常广泛,很有必要对其学习一下. 打个不太恰当的比方,TCP/IP协议可以看成是邮局与邮递员的关系(实际TCP/IP协议族会包含四层,应用层.传输层.网络层.链路层).这个协议族中的IP协议定位到哪台计算机,而具体到这台计算机的哪个端口(应用程序)就需要TCP协议,一个属于网络层,一个属于传输层,互相依赖,提供有效的解决通信问题的措施.这就好