Server ={ _host = "localhost", _port = 8080,}Client = { _host = "", -- Client IP and PORT will be assigned _port = 0,}function Client:Run(data) socket2 = require("socket") self._client = assert(socket2.connect(self._host, self._port)) ip, port = self._client:getpeername() assert(ip, port) print("Server Client connected to " .. ip .. " on " .. port) Client:SendServerData(data)endfunction Client:SendServerData(data) Server._sourceFile:seek("set") if not data then data = Server._sourceFile:read("*a") end Server._sourceFile:close() assert(self._client:send("response"..data.."\n")) print("Server data sent") self._client:shutdown() -- Data sent, close connectionendfunction Server:Run() socket = require("socket") md5 = require("md5") self._server = assert(socket.bind(self._host, self._port,8)) ip, port = self._server:getsockname() assert(ip, port) print(ip..' running on port ' .. port) self:Listen()endfunction Server:Listen() while true do print("Looking for new clients") self._client = assert(self._server:accept()) Client._host = self._client:getsockname() print("Got client") local line, error = self._client:receive() while not error do -- If client requests refresh, compare the md5s, and if they're different, -- send the file to the client's server local sstart,send = string.find(line,'request') if sstart and send then self._sourceFile = io.open("source.lua") self._sourceFile:seek("set") Client._port = string.sub(line,1,sstart-1) local data = self._sourceFile:read("*a") local clientmd5 = string.sub(line,send+1,-1) local sourcemd5 = md5.sum(data) if clientmd5 ~= sourcemd5 then print("Client data differs from server data") Client:Run() else print("Client data is up to date") Client:Run("UPTODATE") end -- if the client requests close elseif line == "close" then self._client:close() error = "Connection closed by client" end line, error = self._client:receive() end -- if error occurs, close connection with client print(error) self._client:close() endendServer:Run()