서버에 연결된 모든 클라이언트가 소켓 수신기가되어야합니다. 서버는 특정 클라이언트에 연결을 시도하고 소켓 메시지를 통해 다양한 작업을 수행하도록 지시합니다. 그래서 내 질문은, 내 Java 클라이언트가 ServerSocket 수 있으며 서버 요청을 수신 대기입니까? 그리고 클라이언트 컴퓨터에로드 된 웹 페이지가 클라이언트 IP 주소를 알고 메시지를 보낼 수도 있습니다. 우리는 많은 클라이언트가 연결되어있는 서버에서 실행중인 응용 프로그램을 가지고 있으며 클라이언트 웹 페이지에서 단추를 누르면이 클라이언트와 연결하여 메시지를 보냅니다. 대부분의 시간 서버는 리스너이지만, 우리의 경우에는 클라이언트가 리스너가 서버 요청을 기다리는 정반대가 필요합니다. 그러나 서버는 클라이언트가 DHCP를 통해 연결되기 때문에 클라이언트 IP 주소가 연결을 설정하는 것임을 알아야합니다.클라이언트 소켓을 리스너로 사용 하시겠습니까?
Btw, 모든 고객은 기본적으로 당사 서버에서 웹 페이지를 실행하고 있으며 각 클라이언트는 자체 PC를 가지고 있습니다. 내가해야 할 일은 각 클라이언트 컴퓨터에서 USB 장치를 제어하는 것입니다. 웹 사이트 소프트웨어를 제어 할 수 있기 때문에 클라이언트의 외부 하드웨어를 제어하는 것이 원격으로 매우 어렵 기 때문에 소켓을 사용하여 소켓을 사용하는 것이 목표였습니다. 따라서 Java 응용 프로그램을 작성하고 클라이언트 시스템에서 실행되는 청취자 역할을 수행하면 누군가가 웹 페이지의 버튼을 누르면 서버가 클라이언트 시스템에 연결하여 메시지를 전송하려고 시도합니다. 나는 서버 측에서 이것을 처리하는 방법을 모르므로 모든 클라이언트에게 메시지를 브로드 캐스팅하고 싶지 않기 때문에 어떤 클라이언트가 말하는지 알고 있습니다. 단, 버튼 하나만 눌렀습니다. 각 클라이언트는 DHCP 주소 지정을 통해 연결되므로 hostID를 하드 코드 할 수 없습니다. 서버 측의 버튼 이벤트에 java/groovy 또는 ajax 스크립트를 첨부 할 수는 있지만 서버에서이 프로토콜을 설정하는 방법을 잘 모르겠습니다.
다음은 클라이언트/서버 측에서 사용할 수있는 소켓 연결의 예입니다. DHCP IP 주소가 올바르게 작동하도록 클라이언트를 알아야합니다.
서버 측 요청하는 클라이언트 작업
public void requestSocket()
{
Socket socket = null;
private BufferedReader in = null;
private PrintWriter out = null;
//Create socket connection for server
String serverAddress = "localhost"; // Needs to be the client DHCP IP address.
try
{
socket = new Socket(serverAddress, 4444);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
catch (UnknownHostException e)
{
System.out.println("Unknown host: " + serverAddress);
System.exit(1);
}
catch (IOException e)
{
System.out.println(e);
System.out.println("No I/O");
System.exit(1);
}
}
클라이언트 측 리스너는 사람이 이러한 질문에 답 할 수있는 서버
public void listenSocket()
{
int portNumber = 4444;
ServerSocket server = null;
Socket client = null;
BufferedReader in = null;
PrintWriter out = null;
try
{
client = new ServerSocket(portNumber);
}
catch (IOException e)
{
System.out.println("Could not listen on port " + portNumber);
System.exit(-1);
}
try
{
server = client.accept();
}
catch (IOException e)
{
System.out.println("Accept failed :" + portNumber);
System.exit(-1);
}
try
{
in = new BufferedReader(new InputStreamReader(server.getInputStream()));
out = new PrintWriter(server.getOutputStream(), true);
} catch (IOException e) {
System.out.println("Read failed");
System.exit(-1);
}
while(true)
{
try
{
line = in.readLine();
//Send data back to client
out.println(line);
}
catch (IOException e)
{
System.out.println("Read failed");
System.exit(-1);
}
}
}
역할을?
첫 번째 : 고객이 무엇입니까? 자바 클라이언트 또는 브라우저에서 웹 페이지? – Vadim