Я новичок в сфере услуг Apache и пытаюсь создать клиентский сокет, который должен подключаться к какому-либо серверу.Мой код Java выглядит так:
package nettyTutorial.nettyTutorial;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.BufferedReader;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
socket = new Socket(host.getHostName(), 1112);
BufferedReader reader;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
// read next line
line = reader.readLine();
}
reader.close();
socket.close();
}
}
И сервер выглядит так:
package nettyTutorial.nettyTutorial;
import java.io.IOException;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;
public class TCPServer {
//netstat -ano | findstr :yourPortNumber
//taskkill /PID typeyourPIDhere /F
//static ServerSocket variable
private static ServerSocket server;
//socket server port on which it will listen
private static int port = 1112;
public static void main(String args[]) throws IOException, ClassNotFoundException, InterruptedException{
//create the socket server object
server = new ServerSocket(port);
//keep listens indefinitely until receives 'exit' call or program terminates
while(true){
System.out.println("Waiting for client request");
//creating socket and waiting for client connection
Socket socket = server.accept();
System.out.println("Accepted client request");
int numberMessages = 0;
while(numberMessages < 11) {
String string = "Hello World" + numberMessages + "\r\n";
System.out.println("Sending " + string);
socket.getOutputStream().write(string.getBytes(Charset.forName("UTF-8")));
Thread.sleep(1000);
numberMessages = numberMessages +1;
}
}
Как можно себе представить, сервер ожидает подключения клиентского сокета и отправляет текст"Hello world" каждую секунду к клиентскому сокету.
ЗДЕСЬ МОЙ ВОПРОС: Как я могу создать это точное взаимодействие с клиентским сокетом в файле blueprint.xml apache servicemix?
ЧТО Я ИМЕЮСОВЕРШЕНО?
Я создал следующий код, который является почти копией вставки клиентского Java-кода:
package nettyTutorial.nettyTutorial;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class ClientBean implements Processor {
public void process(Exchange exchange) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
socket = new Socket(host.getHostName(), 1112);
BufferedReader reader;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
// read next line
line = reader.readLine();
exchange.getOut().setBody(line);
}
reader.close();
socket.close();
}
}
Кроме того, я создал этот файл blueprint.xml:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<route id="routeNetty" >
<bean ref="client_bean" />
<to uri="log:test"/>
</route>
</camelContext>
<bean id="client_bean" class="nettyTutorial.nettyTutorial.ClientBean">
</bean>
</blueprint>
То, на что я надеялся, это произойдет:
При запуске сервера и последующем запуске консоли apache karaf клиентский сокет должен подключаться к серверному сокету, и соединение между ними должно быть установлено.
Что на самом деле происходит: консоль apache karaf выводит сообщение «Аутентификация прошла успешно - karaf», но сервер продолжает слушать, пока не подключится к клиентскому сокету.
Я думаю, что фундаментальное понимание того, как внедряются файлы чертежейбобы здесь отсутствуют.Если у кого-то есть советы / рекомендации о том, как это сделать, я был бы действительно счастлив: D.
PS: Я также поместил файл jar в папку deploy, используя maven с командой:
mvn clean install
И файл pom.xml выглядит так:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.shengwang.example</groupId>
<artifactId>spring-camel-netty3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-camel-netty</name>
<url>http://maven.apache.org</url>
<properties>
<!-- Generic properties -->
<java.version>1.7</java.version>
<!-- Camel -->
<camel.version>2.14.1</camel.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-netty</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Use JDK 1.7 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<!-- Allows the routes to be run via 'mvn camel:run' -->
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-maven-plugin</artifactId>
<version>${camel.version}</version>
</plugin>
</plugins>
</build>