단체 채팅의 간단한 실현
1948 단어 실현
즉, 서버는 클라이언트가 올린 정보를 받아들여 각각 클라이언트에게 보낸다
V1 버전 구현: telnet 연결, 한 클라이언트가 메시지를 보내고 다른 클라이언트가 받아들일 수 있는
서버 라인에서 클라이언트가 연결을 신청할 때마다 서버 라인을 시작하여 이 연결을 처리합니다. 먼저 하나의 대기열로 이 서버 라인을 저장합니다.
서버 루틴 대상을 저장할 때마다 클라이언트 대상을 저장하는 것과 같다.
서버를 시작한 후 클라이언트가 연결을 신청합니다. 연결이 성공하면 서버 라인을 시작하여 이 연결을 처리하고 이 라인을 대기열에 추가합니다.
서버 스레드 대상 serverthread는 우선 입력 흐름 InputStream을 통해 클라이언트가 보내는 메시지를 읽어야 합니다
그런 다음 sendToAll () 메서드를 사용하여 대기열의 나머지 스레드에 메시지를 전달합니다.
// ,
/**
* msg
* @param msg
* @param sst
*/
public static void sendToAll(String msg,ServerThread sst){
for(int i = 0;i<stList.size();i++){
ServerThread st = stList.get(i);
st.sendToClient(sst.name + "say: " +msg);
}
}
각 라인에서 해당 클라이언트로 내보내기
① InputStream을 BufferedReader로 포장하여 정보를 쉽게 읽을 수 있음
//InputStream은 한 바이트 한 바이트만 읽을 수 있으며, BufferedReader 객체로 봉인되어 한 번에 한 줄을 읽을 수 있습니다.
//BufferedReader 구조기는 Reader 유형의 매개 변수가 있어야 하고 InputStreamReader는 Reader의 하위 클래스입니다.
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
② 서버 스레드를 처리하는 경우 하나의 클래스로 단독으로 작성하거나 이러한 스레드를 관리하는 방법을 ServerThread 클래스에 쓸 수 있음
③ 프로그램을 작성할 때 항상 프레임워크를 먼저 작성한다. 즉, 내가 어떤 방법을 필요로 하는지 그 기능을 실현하지만, 이렇게 하면 그 안에 내용을 작성하는 것을 자주 잊어버린다. 특히main()과 run()
④ 빈 포인터 이상...이 길은 나의 성장 실수를 수반한다...
출력 흐름 OutputStream이 비어 있습니다. ous = client를 가져오는 것 같습니다.getOutputStream () 의 코드는 실행되지 않을 때 ous 를 사용합니다.
관리의 추가 방법 호출, 즉 ManageServer에 문제가 발생했습니다.addST(ServerThread st);호출
이 라인을 먼저 시작합니까?현재 라인 대상을 대기열에 추가합니까?
답은 틀림없이 먼저 라인을 시작해서 ous:ous =client를 얻었을 것이다.getOutputStream()
즉, 사람이 너무 고지식해서는 안 된다. 나는 처음에 Manage Server를 시작했다.addST(ServerThreadst)는 시작 스레드 뒤에 쓰여 있지만, 대기열에 스레드를 추가하는 함수는 반드시 스레드 대상을 만든 뒤에 바짝 따라가야 한다고 누가 규정했습니까?
⑤ 스레드 대기열에서 제거한 다음 스레드를 닫습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ReactRouter의 구현 방법즉, Hash 및 그 후의 문자는 서버에 전송되어 자원이나 데이터의 요청을 하지 않습니다.브라우저 동작을 지도하는 데 사용되며 서버에 효과가 없기 때문에 변경 URL 은 페이지를 다시 불러오지 않습니다.HTTP의 역...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.