Я хочу отправить файл, используя tcp-модуль Spring Integration. Поэтому я сделал серверную часть, используя tcp-connection-factory.
<int-ip:tcp-connection-factory id="crLfServer"
type="server"
host="localhost"
port="7777"
single-use="true"
so-timeout="10000"
serializer="serializer"
deserializer="serializer"
/>
<bean id="serializer" class="com.sds.redca.core.normalizer.CustomSerializerDeserializer" />
<int-ip:tcp-inbound-gateway id="gatewayCrLf"
connection-factory="crLfServer"
request-channel="toSA"
error-channel="errorChannel"/>
Но я сделал клиентскую часть с классом pojo в java следующим образом.
import java.io.BufferedInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
public class SendClient {
public static void main(String[] args) {
String serverIp = "localhost";
Socket socket = null;
try {
// 서버 연결
socket = new Socket(serverIp, 7777);
System.out.println("서버에 연결되었습니다.");
FileSender fs = new FileSender(socket);
fs.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class FileSender extends Thread {
Socket socket;
DataOutputStream dos;
FileInputStream fis;
BufferedInputStream bis;
public FileSender(Socket socket) {
this.socket = socket;
try {
dos = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
String fName = "d:/test2/test.jpg";
dos.writeUTF(fName);
File f = new File(fName);
fis = new FileInputStream(f);
bis = new BufferedInputStream(fis);
int len;
int size = 4096;
byte[] data = new byte[size];
while ((len = bis.read(data)) != -1) {
dos.write(data, 0, len);
}
dos.flush();
dos.close();
bis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Наконец, я получил ошибку, подобную следующей.
CRLF not found before max message length: 2048
Я думаю, что мне нужно игнорировать сериализатор/десериализатор для связи между двумя сторонами.