Lua 服务器与客户端实例
===============================================================
服务器,main.lua
===============================================================
local socket = require ( "socket" )
local tcpServer = nil
--创建指定端口的tcp server
local function createTCPServer( port )
-- Create Socket
local tcpServerSocket , err = socket.tcp()
local backlog = 5
-- Check Socket
if tcpServerSocket == nil then
return nil , err
end
-- Allow Address Reuse
tcpServerSocket:setoption( "reuseaddr" , true )
-- Bind Socket
local res, err = tcpServerSocket:bind( "*" , port )
if res == nil then
return nil , err
end
-- Check Connection
res , err = tcpServerSocket:listen( backlog )
if res == nil then
return nil , err
end
-- Return Server
return tcpServerSocket
end
--接受来自客户端的连接,并保存在tcpClient
local tcpClient = nil
local function acceptClient()
tcpServer:settimeout( 0 )
clientIn , _ = tcpServer:accept()
if clientIn then
tcpClient = clientIn
end
end
--接收已连接的客户端(tcpClient)数据
local function receiveLoop()
if tcpClient ~= nil then
local tcpClientMessage , _ = tcpClient:receive('*l')
if ( tcpClientMessage ~= nil ) then
print(tcpClientMessage)
tcpClient:send( "back:" .. tcpClientMessage .. "\n")
end
end
end
local function main()
tcpServer , _ = createTCPServer( 8080 )
if tcpServer then
Runtime:addEventListener( "enterFrame" , acceptClient )
Runtime:addEventListener( "enterFrame" , receiveLoop )
end
end
main()
===============================================================
客户端程序,main.lua
===============================================================
local socket = require("socket")
local tcpClient = nil
--接收来自服务器的数据
local function receiveData()
if tcpClient then
tcpClient:settimeout(0)
local msg = tcpClient:receive("*l")
if msg then
print(msg)
end
end
end
--向服务器发送数据
local index = 0
local function btnListener(event)
index = index + 1
if tcpClient then
tcpClient:send("pack index:" .. index .. ".\n")
end
end
--初始化
local function main()
local btn = ui.newButton{
default = "buttonBlue.png",
over = "buttonBlueOver.png",
onRelease = btnListener,
id = "btn"
}
btn:setReferencePoint(display.TopLeftReferencePoint)
btn.x = 10
btn.y = 100
--创建tcp连接
tcpClient = socket.tcp()
if tcpClient then
local ret = tcpClient:connect("192.168.1.2", 8080)
if ret then
tcpClient:send("hi, server, i'm client.\n")
Runtime:addEventListener("enterFrame", receiveData)
end
end
end
main()
lua socket相关文档参见:http://w3.impa.br/~diego/software/luasocket/tcp.html
Lua 服务器与客户端实例的更多相关文章
- Lua 服务器与客户端实例(转)
=============================================================== 服务器,main.lua ======================= ...
- Lua 服务器Socket通信实例(转)
local socket = require"socket" local host = "127.0.0.1"local port = "843&qu ...
- Lua 服务器Socket通信实例
local socket = require"socket" local host = "127.0.0.1"local port = "843&qu ...
- linux邮件服务器postfix配置实例
linux邮件服务器postfix配置实例(超级详细!!!) 2013-03-13 13:30:21 标签:邮件服务器 linux 1. 系统安装:1)centos4.3 选上MAIL组件里的全部.2 ...
- Linux系统编程(32)—— socket编程之TCP服务器与客户端
TCP协议的客户端/服务器程序的一般流程 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后, ...
- Oracle服务器和客户端的安装和卸载
Oracle 11g服务器与客户端的完全卸载方式与前些版本有了改变: 一.卸载前准备: 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务. 二.批处理卸载 ...
- c#Socket服务器与客户端的开发(2)
上一篇文章我们使用原生的socket分别实现了服务器和客户端, 本篇文章使用SuperSocket来开发实现服务器, 之前也介绍了SuperSocket是一个轻量级, 跨平台而且可扩展的 .Net/M ...
- node.js中使用http模块创建服务器和客户端
node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...
- Node学习HTTP模块(HTTP 服务器与客户端)
Node学习HTTP模块(HTTP 服务器与客户端) Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基 ...
随机推荐
- 1_02 Vue Slot
slot 插槽 插槽内容 const component ={ template: ` <div> <slot></slot> </div> ` } n ...
- javascript面向对象中继承实现?
面向对象的基本特征有:封闭.继承.多态. 在javascript中实现继承的方法: 1.原型链(prototype chaining) 2.call()/apply() 3.混合方式(prototyp ...
- oracle中in和exists的区别
IN适合于外表大而内表小的情况:EXISTS适合于外表小而内表大的情况. 性能上的比较 比如Select * from T1 where x in ( select y from T2 ) 执行的过程 ...
- dwr的ScriptSession和HttpSession分析
1.关于ScriptSession ScriptSession不会与HttpSession同时创建 当我们访问一个页面的时候,如果是第一次访问,会创建一个新的HttpSession,之后再访问的时候, ...
- 运行python文件时出错SyntaxError: Non-UTF-8 code starting with '\xb5' in file, but no encoding declared;
今天ytkah在运行python文件时出现错误,提示如下,很明显这是没有定义python文件编码引起的问题,那么要怎么解决呢?很简单,在文件头部定义一下就可以了. File "hello.p ...
- RN animated缩放动画
效果图: 代码: import React, {Component} from 'react'; import { AppRegistry, StyleSheet, Text, Animated, T ...
- 我是怎么走上python这条路的
看看时间,此刻是零点43分,写了几十行代码,看了3个小时关于Django的视频,连续两个多月的坚持,突然想停下来,想想,感觉挺搞笑的... 为什么学python?我终于正式的问了自己这个问题,我想拿个 ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- [sh]getopt参数解析
https://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html sh参数处理方法 * 手工处理方式 * getopts #好像不支持长 ...
- 一份C++学习资源,咬牙切齿地好用呀
多年以后,你已经是一名技术总监,有一个美丽的妻子,两个孩子:你已经拥有了现在的你想都不敢想的一切:那时,你也一定会忘记,今天这篇教程,如同一颗石子,铺就过你前进的路. 下面是我们的老师根据现有资源整理 ...