注釈を使用してxml confなしでSpring Integrationを使用してTCPクライアントを実装する必要があります。PythonのTCPサーバは、Springインテグレーションを使用してTCPクライアントにファイルを送信します。
TCPサーバーはファイルを送信する必要があり、それらを処理するためにはSpring Integrationを使用しなければなりません(今のところ)。だから、私は、PythonでTCPサーバーを作るが、これのための重要性はありません。コード:
import socket as s
host = ''
port = 2303
co = s.socket(s.AF_INET, s.SOCK_STREAM)
co.bind((host, port))
co.listen(5)
print("Server is listening on port {}".format(port))
conn, addr = co.accept()
print('Connected by', addr)
while True:
try:
data = conn.recv(1024)
if not data: break
print("Client Says: " + data)
conn.sendall("Server Says:hi")
except s.error:
print("Error Occured.")
break
print("Closing connection")
conn.close()
そして、ここでのクライアントのためには、春の統合を使用してコードです:
import org.apache.log4j.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.ip.tcp.TcpInboundGateway;
import org.springframework.integration.ip.tcp.connection.TcpNetClientConnectionFactory;
import org.springframework.integration.transformer.ObjectToStringTransformer;
import org.springframework.messaging.MessageChannel;
@Configuration
public class TCPInputChannel {
private static final Logger LOGGER = Logger.getLogger(TCPInputChannel.class);
@Bean
TcpNetClientConnectionFactory clientConnectionFactory() {
LOGGER.info("create TcpNetClientConnectionFactory");
TcpNetClientConnectionFactory cf = new TcpNetClientConnectionFactory("localhost", 2303);
cf.setSingleUse(false);
cf.setSoTimeout(10000);
return cf;
}
@Bean
TcpInboundGateway gateway() {
LOGGER.info("create TcpInboundGateway");
TcpInboundGateway g = new TcpInboundGateway();
g.setConnectionFactory(clientConnectionFactory());
g.setClientMode(true);
g.setRetryInterval(1000);
g.setRequestChannel(input());
return g;
}
@Bean
public MessageChannel input() {
return new DirectChannel();
}
@ServiceActivator(inputChannel = "input", outputChannel = "respString")
ObjectToStringTransformer stringTransformer() {
LOGGER.info("create ObjectToStringTransformer");
ObjectToStringTransformer st = new ObjectToStringTransformer();
return st;
}
@ServiceActivator(inputChannel = "respString")
public String receive(String recv) {
LOGGER.info("Recv: " + recv);
return "echo";
}
}
私はそれを実行すると、サーバは接続を行うことができますが、彼はメッセージを送信することができず、クライアントは何も印刷しません。
私はCRLF行区切りを確保するために私のコードをsettedが、彼はホストとの接続が中断されていることを書きます。そして私のクライアントは何のメッセージも受け取らず、私はサーバをオフフェーンするときに例外を持っているだけです。 – user7953086
また、サーバーが '\ r \ n 'で区切られたメッセージを受け取るようにする必要があります。それがクライアントがデフォルトでどのように動作するかです。 –
各パッケージの終わりを設定したい場合は、どのような方法が最適ですか?他のデシリアライザの1つを使用しますか? – user7953086