flexsim实现socket连接

目录

1.基础信息

2.flask基本语法及命令

3.传输示例

4.代码

5.python与flexsim互联


1.基础信息

  • 软件版本 19.0.0
  • 基于flexsim User Commands 及Scrip实现
  • 实现信息收发及与python的通信
  • 代码可复用于多种场合的业务。

2.flask基本语法及命令

客户端部分:

socketinit ();  //初始化windows后台程序

clientcreate ();//创建客户端socket,并返回一个值。如果创建成功,则返回一个非0正值,否则返回0。后续的连接、收发消息都需要这个值。

clientconnect (num socket, str hostname, num port)

//连接服务器,三个参数分别是clientcreate ()返回的值,服务端的IP地址或本地电脑全名,服务端监听的端口,连接成功则返回一个非0正值,否在返回0。

clientreceive (num socket, str buffer, num buffersize, num noblock[1/0])

//接收服务端发送到socket的消息,返回值为一串字符串。

clientsend (num socket, str message[, num charlength])

//发送消息到socket,如果成功发送,则返回一个非0正值,否则在返回0

clientclose (num socket);//关闭当前socket

socketend ();//关闭所有从socketinit()开始建立的socket,即断开所有连接

服务端部分:

serverclosemain () ;//关闭服务端server及所有打开的连接,一般再模型开始时使用,确保所有连接都已关闭。

socketinit () ;//初始化windows后台程序

servercreatemain (int port) ;//创建指定端口的服务端socket,该端口与客户端的端口保持一致。

serveraccept (int noblocking) ;//监听客户端接入,如果有客户端接入,则返回非0正值,否在返回0。参数noblocking=1,如果没有客户端接入,模型不会停止,但会返回0值;noblocking=0,模型会停止,等待客户端接入后继续运行,并返回一个非0正值。

注:尝试在noblocking=1的情况下连接客户端都以失败告终,暂未获知其中原因。

serverreceive (int connection, char *buffer, int bufsize, int noblocking)

//接收客户端发送到socket的消息,返回值为一串字符串。

serversend (int connection, char* message [, num charlength] )

//发送消息到socket,如果成功发送,则返回一个非0正值,否则在返回0。

servercloseconnection (int connection)

//关闭当前服务端连接。

socketend ()

//关闭所有打开的socket连接。

3.传输示例

客户端部分:

 

 

服务端部分:

4.代码

treenode connection = assertsubnode(node("/Tools",model()), "client", DATATYPE_NUMBER);

string hostname = parstr(1);
int portnum = parval(2);
int client = 0;
if(socketinit()) {
	client = clientcreate(); 
}
if(client)
{
	if(clientconnect(client,hostname,portnum))
	{
		setnodenum(connection,client);
		return 1;
	}
	else
	{
		msg("Client Error", "Failed to connect to server.");
		if(!clientclose(client))
			msg("Socket Error", "Failed to close client socket.");
		return 0;
	}
}
else
	msg("Socket Error", "Failed to create client socket."); 
return client; 
int portnum = parval(1);
treenode connection = assertsubnode(node("/Tools", model()), "client", DATATYPE_NUMBER);
if(socketinit())
{
	servercreatemain(portnum);
	int client = serveraccept(0);
	if(!client)
	{
		serverclosemain();
		msg("Client Error", "No client connection made.");
		return 0;
	}
	else
	{
		setnodenum(connection, client);
		return 1;
	}
}
else
{
	msg("Socket Error", "Socket not initiated.");
	return 0;
}

5.python与flexsim互联

利用python的socket模块,可以实现一个基础的服务端,对flexsim的数据实现接收

传入的信息:

 

 回传的信息:

import socket

backlog=5
sk = socket.socket()
sk.bind(('127.0.0.1',8888))
sk.listen(backlog)

print("开始等待接受客户端数据----")
while True:
    conn, addr = sk.accept()  # 获取客户端地址
    print(conn, addr)
    print("客户端来数据了")
    while True:
        data = conn.recv(1024)  # 接收数据
        print("接受的数据:", data)
        if not data:
            print("client has lost")
            break
        conn.send(data.upper())  # 返回数据

serve.close()
treenode textobj = node("/Text4",model()); 
double client = getnodenum(node("/Tools/client",model()));
clientsend(client,"17.1:0.1.1");
string input=clientreceive(client,NULL,15,1);
if(!comparetext(input,"")) // If an empty string was received, then the client has not sent any data yet.
{
	msg("Access succeed",input);
	setlabelstr(textobj,"text",input); 
	return input;
}
return 0;

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值