0
질문이 있습니다. 현재 약간의 프로젝트를 진행 중이고 막 다른 골목을 발견했습니다. Java Mulithreaded Server 클라이언트
import java.io.*;
import java.net.*;
class TCPServer
{
public static void main(String argv[]) throws Exception
{
ServerSocket welcomeSocket = new ServerSocket(3443);
Socket clientSocket =null;
ClientHandler ch;
while(true)
{
try{
clientSocket = welcomeSocket.accept();
System.out.println("Client connected on port :"+clientSocket.getPort());
ch = new ClientHandler (clientSocket);
Thread t = new Thread(ch);
t.start();
}catch (Exception e){
System.out.println("SERVER CRASH");
}
}
}
}
그런 다음 클라이언트가 새 스레드는 ClientHandler에 만들어집니다 포트 3443를 통해 연결 : 나는 자바 서버가 있습니다. 지금 문제는 클라이언트 쪽에서 연결에 사용 된 소켓이 여전히 포트 3443에 있지만 서버 쪽에서 스레드가 임의의 포트에 있다고 가정 해 봅시다. 서버가 스레드와 통신 할 수 있지만 클라이언트와 통신 할 수는 없습니다. 쓰레드가 어떤 포트를 사용하고 있는지 알지 못하기 때문에 ... 나는이 모든 것들과 혼동 스럽다. 클라이언트 클래스는 초기 연결 만 할 필요가있다. 그러면 모든 통신은 ClientHandler 클래스를 통해 이루어진다. 그래서 또한 클라이언트 클래스에서 ClientHandler의 개체를 인스턴스화해야합니까?
import java.io.*;
import java.net.*;
class TCPClient
{
static Socket clientSocket = null;
public static void main(String argv[]) throws Exception
{
BufferedReader k = new BufferedReader(new InputStreamReader(System.in));
BufferedReader ine = null;
DataOutputStream oute = null;
try{
clientSocket = new Socket("localhost", 3443);
oute = new DataOutputStream(clientSocket.getOutputStream());
ine = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (UnknownHostException e) {
System.out.println("Unknown host");
System.exit(1);
} catch (IOException e) {
System.out.println("No I/O");
System.exit(1);
}
try{
//send
oute.writeBytes(k.readLine());
//recieve
String line = ine.readLine();
System.out.println("Text received: " + line);
} catch (IOException e){
System.out.println("Read failed");
System.exit(1);
}
}
}
이 문제는 여전히 포트 3443에 연결되어있는 클라이언트에서 생성 된 소켓이며, 서버는이 포트를 듣고있다, 그래서 서버에서 아무것도받을 수 없습니다 :
은 여기 내 클라이언트 클래스의 (무한 루프). clientHandler는 다른 포트에 있습니다. 내가 잘못 했니?
그래서 통신은 clientHandler에서만 이루어져야합니다. – Wilsane
예; 'accept()'가 다시 호출 될 때까지 추가 클라이언트가 연결할 수 없으므로'ServerSocket.accept()'를 호출하는 스레드는 가능한 빨리 수신 연결을 포기해야합니다. – Bombe