단체 채팅의 간단한 실현

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)는 시작 스레드 뒤에 쓰여 있지만, 대기열에 스레드를 추가하는 함수는 반드시 스레드 대상을 만든 뒤에 바짝 따라가야 한다고 누가 규정했습니까?
⑤ 스레드 대기열에서 제거한 다음 스레드를 닫습니다.

좋은 웹페이지 즐겨찾기