Message 1 of 2
Unreliable executed code though dotNet tcp server

Not applicable
06-13-2016
02:22 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello,
I'm trying to make a python program communicate with maxscript.
I made a dotNet tcp server in maxscript, and a I am using the python socket library to send data from my client.
The problem is that the first time I send the command:
saveMaxFile "C:/test.max"
I get an exception :
Unknown system exception
But the second time it's sent, there is not problem.
Also, sending the command :
resetMaxFile() #noprompt
always get me the same exception, but for commands like creating objects I don't have any problem.
Does anyone ever encoutered this problem ?
Code :
MaxScript server :
fn createServer ipAddress port = ( dotNetIPAddress = (DotNetClass "System.Net.IPAddress").Parse ipAddress tcpListener = DotNetObject "System.Net.Sockets.TcpListener" dotNetIPAddress port tcpListener.Start()s msgReceived = "" print ("listening on " + (ipAddress as string) + ":" + (port as string)) while true do ( print("waiting for a client socket") socket = tcpListener.AcceptSocket() print("client socket accepted") while msgReceived != "exit" do ( sendByteStream = DotNetObject "System.Byte[]" 10000 socket.Receive sendByteStream encoding = DotnetClass "System.Text.UTF8Encoding" msgReceived = trimright (encoding.UTF8.GetString(sendByteStream)) if msgReceived == "socketClosing" then ( print("closing socket") socket.Close() exit ) else ( if msgReceived != "" then ( print("execute : " + msgReceived) -- execute msgReceived try( result = execute(msgReceived) ) catch ( error_str = "***" + getCurrentException() +"***\n" print(error_str) ) -- send result ascii_encoder = dotNetObject "System.Text.ASCIIEncoding" bytes = ascii_encoder.GetBytes (result as string) result = socket.Send bytes ) ) ) ) ) fn BackgroundTcpListenerDoWork theSender theEvent = ( ipAddress = "127.0.0.1" port = 7500 try ( createServer ipAddress port exit ) catch( print("server crashed or port " + (port as string) + " is already used") ) ) BackgroundWorker = DotNetObject "System.ComponentModel.BackgroundWorker" DotNet.AddEventHandler BackgroundWorker "DoWork" BackgroundTcpListenerDoWork BackgroundWorker.WorkerSupportsCancellation = true BackgroundWorker.RunWorkerAsync()
Python client :
import socket def sendMessage(msg, socket): socket.send(msg) return s.recv(responseBufferSize) ## connect to the server responseBufferSize = 1024 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1', 7500)) ## send messages sendMessage('saveMaxFile "C:/test.max"', s) sendMessage('saveMaxFile "C:/test.max"', s) ## close the socket from server and client side sendMessage('socketClosing', s) s.shutdown(socket.SHUT_RDWR) s.close()
To test, first execute the maxscript server code, and then the python one.
thank you