Я создал сокет-сервер и клиентский класс и успешно выполняю.При создании тестового класса JUnit для сервера сокета и клиента я получаю любой результат.Я предполагаю, что он ожидает запроса клиента, но после создания клиента он также не выполняется.
Класс сервера в
PrimaryKeyValueStore.java
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Collections;
import java.util.Set;
import college.Student;
public class PrimaryKeyValueStore {
private InMemoryCache inMemoryCache;
public PrimaryKeyValueStore() {
inMemoryCache=new InMemoryCache();
}
public void startServer(int port) {
ServerSocket serverSocket=null;
ObjectInputStream inputStreamFromClient=null;
Socket clientSocket=null;
try {
serverSocket=new ServerSocket(port);
while (true) {
clientSocket=serverSocket.accept();
inputStreamFromClient=new ObjectInputStream(clientSocket.getInputStream());
Student student=(Student) inputStreamFromClient.readObject();
switch(student.getRestMethod()) {
case "PUT": inMemoryCache.put(student.getUserName(),student);
new Thread(new PrimaryKeyValueStoreClient(clientSocket,Collections.EMPTY_SET)).start();
break;
case "GET": new Thread(new PrimaryKeyValueStoreClient(clientSocket,inMemoryCache.get(student.getUserName()))).start();
break;
case "DELETE": Set<Student> setStudent=inMemoryCache.get(student.getUserName());
inMemoryCache.delete(student.getUserName());
new Thread(new PrimaryKeyValueStoreClient(clientSocket,setStudent)).start();
break;
case "GETALL": new Thread(new PrimaryKeyValueStoreClient(clientSocket,inMemoryCache.getAll())).start();
break;
}
}
}
catch (Exception e) {
System.err.println("Server Error :: "+e.getMessage());
System.err.println("Localized :: "+e.getLocalizedMessage());
System.err.println("Stack Trace :: "+e.getStackTrace());
System.err.println("To String :: "+e.toString());
}finally {
if(inputStreamFromClient!=null) {
try {
inputStreamFromClient.close();
}catch(IOException e) {
e.printStackTrace();
}
}
if(serverSocket!=null) {
try {
serverSocket.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
}
и класс клиента был
CollegeClient.java
public class CollegeClient {
private static final String SOCKET_IP="127.0.0.1";
public Set<Student> sendMessage(Student student, int port) {
Socket clientSocket=null;
ObjectOutputStream outToServer=null;
ObjectInputStream fromServer=null;
try {
clientSocket=new Socket(SOCKET_IP, port);
outToServer=new ObjectOutputStream(clientSocket.getOutputStream());
outToServer.writeObject(student);
fromServer=new ObjectInputStream(clientSocket.getInputStream());
Set<Student> employeeSet=(Set<Student>) fromServer.readObject();
return employeeSet;
}catch(Exception e) {
System.err.println("Client Error :: "+e.getMessage());
System.err.println("Localized :: "+e.getLocalizedMessage());
System.err.println("Stack Trace :: "+e.getStackTrace());
}finally {
if(clientSocket!=null) {
try {
clientSocket.close();
}catch(IOException e) {
e.printStackTrace();
}
}
if(fromServer!=null) {
try {
fromServer.close();
}catch(IOException e) {
e.printStackTrace();
}
}
if(outToServer!=null) {
try {
outToServer.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
, и мой тестовый класс был
public class CollegeClientTest {
private CollegeClient collegeClient;
private PrimaryKeyValueStore primaryKeyValueStore;
@Before
public void setUp() {
collegeClient = new CollegeClient();
primaryKeyValueStore=new PrimaryKeyValueStore();
}
@Before
public void serverStart() {
primaryKeyValueStore.startServer(9000);
}
@Test
public void sendMessage() {
int port=9000;
Student student=new Student();
student.setUserName("a");
student.setFirstName("aa");
student.setLastName("aaa");
student.setAge(1);
student.setMark(100);
student.setRestMethod("GET");
Set<Student> employeeSet=collegeClient.sendMessage(student, port);
System.out.println("===>> "+employeeSet);
}
}
, и результат был,
Может кто-нибудь помочь решить эту проблему.