gpt4 book ai didi

java - 如何设置 Spring TCP 客户端和服务器模型?

转载 作者:可可西里 更新时间:2023-11-01 02:42:43 29 4
gpt4 key购买 nike

所以按照这个问题(how to plug a TCP-IP client server in a spring MVC application),我成功地将网关连接到我的 Spring REST Controller 中。但是,我对下一步该去哪里感到困惑。这是我要实现的目标:

1) 当某个路由遇到 POST 请求时,打开从 POST 传递的到某个 IP 的连接(或使用已经使用此 IP 打开的连接)并发送消息。

@RequestMethod(value = '/sendTcpMessage', method=RequestMethod.POST)
public void sendTcpMessage(@RequestParam(value="ipAddress", required=true) String ipAddress,
@RequestParam(value="message", required=true) String message) {

//send the message contained in the 'message' variable to the IP address located
//at 'ipAddress' - how do I do this?

}

2) 我还需要我的 Spring 后端来监听传递给它的 TCP“消息”,并将它们存储在缓冲区中。我的 Javascript 将每 5 秒左右调用一次路由,并从缓冲区中读取信息。

这是我的 Controller 代码:

@Controller
public class HomeController {

@Resource(name = "userDaoImpl")
private UserDAO userDao;
@Resource(name = "receiveTcp")
private ReceiveTcp tcpMessageReceiver;
@Autowired
SimpleGateway gw;

String tcpBuffer[] = new String[100];

@RequestMapping(value="/")
public String home() {
return "homepage";
}

@RequestMapping(value = "/checkTcpBuffer", method=RequestMethod.POST)
public String[] passTcpBuffer() {
return tcpMessageReceiver.transferBuffer();
}

}

根上下文.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-ip="http://www.springframework.org/schema/integration/ip"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/ip http://www.springframework.org/schema/integration/ip/spring-integration-ip.xsd
http://www.springframework.org/schema/integration/ http://www.springframework.org/schema/integration/spring-integration.xsd">

<!-- Root Context: defines shared resources visible to all other web components -->
<int:gateway id="gw"
service-interface="net.codejava.spring.interfaces.SimpleGateway"
default-request-channel="input"/>

<bean id="javaSerializer"
class="org.springframework.core.serializer.DefaultSerializer"/>
<bean id="javaDeserializer"
class="org.springframework.core.serializer.DefaultDeserializer"/>

<int-ip:tcp-connection-factory id="server"
type="server"
port="8081"
deserializer="javaDeserializer"
serializer="javaSerializer"
using-nio="true"
single-use="true"/>

<int-ip:tcp-connection-factory id="client"
type="client"
host="localhost"
port="8081"
single-use="true"
so-timeout="10000"
deserializer="javaDeserializer"
serializer="javaSerializer"/>

<int:channel id="input" />

<int:channel id="replies">
<int:queue/>
</int:channel>

<int-ip:tcp-outbound-channel-adapter id="outboundClient"
channel="input"
connection-factory="client"/>

<int-ip:tcp-inbound-channel-adapter id="inboundClient"
channel="replies"
connection-factory="client"/>

<int-ip:tcp-inbound-channel-adapter id="inboundServer"
channel="loop"
connection-factory="server"/>

<int-ip:tcp-outbound-channel-adapter id="outboundServer"
channel="loop"
connection-factory="server"/>

<int:service-activator input-channel="input" ref="receiveTcp" method = "saveValue"/>

</beans>

ReceiveTcp.java

@Component(value = "receiveTcp")
public class ReceiveTcp {

String buf[] = new String[100];
int currentPosition = 0;

@ServiceActivator
public void saveValue(String value){
System.out.println(value);
buf[currentPosition] = value;
currentPosition++;
}

public String[] transferBuffer() {
String tempBuf[] = new String[100];
tempBuf = buf;
buf = new String[100];

return tempBuf;
}
}

我该如何解决这些问题?

最佳答案

您需要使用 ResponseEntity。看这个answer . tcp 连接是双向连接,因此如果您的方法返回响应而不是 void,它会自动将其发送回向您发出请求的 ip。您不必手动执行此操作。

关于java - 如何设置 Spring TCP 客户端和服务器模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26936721/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com