C# 向客户发送消息并接收答复+;根据收到的答复采取行动
问题是: 服务器应向客户端发送SerialPort命令(例如“S”),并从客户端接收port.Readline,就像发送另一个命令(例如“r01”)一样 示例:服务器从客户端发送“S”并接收“N”,因此服务器应发送另一个“S”。如果收到!=“N”然后发送“r01”等等 我可以向客户发送消息,但我无法接收答案并将其存储/使用 到目前为止,我尝试的是: 。将收到的信息保存到serv.ConnectedClient[ID]。接收 服务器: 工人阶级:C# 向客户发送消息并接收答复+;根据收到的答复采取行动,c#,wcf,callback,C#,Wcf,Callback,问题是: 服务器应向客户端发送SerialPort命令(例如“S”),并从客户端接收port.Readline,就像发送另一个命令(例如“r01”)一样 示例:服务器从客户端发送“S”并接收“N”,因此服务器应发送另一个“S”。如果收到!=“N”然后发送“r01”等等 我可以向客户发送消息,但我无法接收答案并将其存储/使用 到目前为止,我尝试的是: 。将收到的信息保存到serv.ConnectedClient[ID]。接收 服务器: 工人阶级: public void doSomething(
public void doSomething(Service serv, string ID)
{
serv.SendMessageToClient(client_name, "S"); //send first message
data = serv.connectedClients[ID].receive.ToString(); //the .receive is empty but should have the clients answer stored
if(data != ""){
serv.SendMessageToClient(client_name, "r01"); //send second message
serv.connectedClients[ID].Information = serv.connectedClients[ID].receive.ToString();
}
}
在Service.cs中:
public void getPortMsg(string msg)
{
connectedClients[OperationContext.Current.Channel.SessionId].receive = msg;
}
在客户机上:
void callback_OnMessageReceivedEvent(string message)
{
string portmsg = "";
portmsg = rfid.send(message); //portmsg gets the port.readline info
client.getPortMsg(portmsg); //send portmsg to server
}
以及rfid.send:
public string send(string senden)
{
string data = "";
port.WriteLine(senden);
data = port.ReadLine();
return data;
}
order:Server向客户机发送一条消息。客户机接收消息并调用一个包含答案的服务方法。服务器应该使用这个答案,但在得到答案之前会发送下一条消息
希望有人知道答案。我有答案。我不认为这是解决问题的最佳方法,但它是有效的: 服务器向客户端发送一条消息+方法的名称 客户机处理消息并向服务器写入答案+方法的名称 服务器现在知道如何处理答案并调用正确的方法 代码示例: 服务器:
public void methodA(){
sendToClient("i want an answer",methodA);
}
public void sendAnswer(string msg, string location) {
if(location == "methodA")
methodB(msg);
}
客户:
public void callback_messageFromServer(string msg,string location){
string answer = workWithMsg(msg);
client.sendAnswer(answer,location);
}
服务器:
public void methodA(){
sendToClient("i want an answer",methodA);
}
public void sendAnswer(string msg, string location) {
if(location == "methodA")
methodB(msg);
}
为了调用相同的方法,我使用int count和switch(count)。
希望它能帮助别人^^
致意