Преобразование кодов сокетов c # tcp в язык 3ds max maxscript - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю над проектом по конвертации кодов сокетов TCP в maxscript, насколько мне известно, мне сложно конвертировать его, кто-нибудь может мне помочь закончить его, заранее спасибо!Вот код для C # хорошо работает в режиме консоли:

Код сервера:

using System;
using System.Net.Sockets;
using System.Threading;
public class AsynchIOServer
{
    static TcpListener tcpListener = new TcpListener(10);
    static void Listeners()
    {
        Socket socketForClient = tcpListener.AcceptSocket();
        if (socketForClient.Connected)
        {
            Console.WriteLine("Client:" + socketForClient.RemoteEndPoint + " now connected to server.");
            NetworkStream networkStream = new NetworkStream(socketForClient);
            System.IO.StreamWriter streamWriter =
            new System.IO.StreamWriter(networkStream);
            System.IO.StreamReader streamReader =
            new System.IO.StreamReader(networkStream);

            while (true)
            {
                string theString = streamReader.ReadLine();
                Console.WriteLine("Message recieved by client:" + theString);
                if (theString == "exit")
                    break;
            }
            streamReader.Close();
            networkStream.Close();
            streamWriter.Close();
        }
        socketForClient.Close();
        Console.WriteLine("Press any key to exit from server program");
        Console.ReadKey();
    }
    public static void Main()
    {
        tcpListener.Start();
        Console.WriteLine("************This is Server program************");
        Console.WriteLine("Hoe many clients are going to connect to this server?:");
        int numberOfClientsYouNeedToConnect = int.Parse(Console.ReadLine());
        for (int i = 0; i < numberOfClientsYouNeedToConnect; i++)
        {
            Thread newThread = new Thread(new ThreadStart(Listeners));
            newThread.Start();
        }
    }
}

1 Ответ

0 голосов
/ 21 февраля 2019

Проверьте этот проект: https://github.com/nmalex/remote-maxscript.dlx

remote-maxscript.dlx - это плагин MaxScript 3dsmax , который работает как удаленный сервер MAXScript внутри 3dsmax.Вы можете запустить / остановить его с помощью команд MAXScript и обмениваться данными с сервером по простому текстовому протоколу.Каждый запрос обрабатывается как код maxscript, он будет выполнен, и результат будет отправлен через TCP.

Внутренне он запускает TCP-сервер, который:

  • прослушивает входящий TCPподключений,
  • получает запросы клиентов в виде простого текста,
  • выполняет текстовые команды как maxscript и возвращает результаты обратно.

Вместо создания плагина DLX вы можете заключить в оболочкуэто в консольное приложение:

#include "stdafx.h"
#include "maxscript.server.h"

using namespace maxscript_server;

void HandleRequest(SOCKET clientSocket, const char* data) {
    printf("Received: %s\n", data);
    // TODO: handle data

    MAXScriptServer::Send(clientSocket, "OK"); // send back result "OK"
}

int main(int argc, char **argv)
{
    MAXScriptServer server((MAXScriptOutputCallback)&HandleRequest);
    server.Listen(29207);
    return 0;
}

Осталось только сделать C ++ в библиотеке C #.

...