뚜벅이

UDP멀티귓속말통신학습.. 1화, 코드 정리는 2화에 본문

카테고리 없음

UDP멀티귓속말통신학습.. 1화, 코드 정리는 2화에

ZZM 2021. 3. 2. 20:47

 

 

리시브용 멀티소켓.  그외 멀티소켓  분리시켜야 할 필요가 있다. 

분리시키고. 새 스레드로 돌리면서  리시버 센더 다 작동토록 유도한다. 

 

 

오브젝트 인풋아웃풋으로 받습니다. .당연히 꺠질거구요 .

메시지인지 대상자인지 를 모르니까요

일단 해쉬맵으로 뽑아줍니다. 해쉬맵에 태워주어야 합니다. 

 

Tcp멀티채팅을 따로 해야 하는데. 

꾸이 띄우는건 그냥 되지만

 

연결되는거 다 되지만 추가되어야 하느 것은 닉네임 칸입니다 .

내 닉네임 그리고 상대 닉네임 .  

 

1. 일단 클라쪽에서 오브젝트 인풋아웃풋 해주고 

2. 콤보박스 그리고 닉네임 텍스트 필드를 만들기.

3. -> String 들어가게 할겁니다 - 제네릭!.

4. 콥보박스는 사우스에 갈껀데 가려면 사우스에 컨테이너가 있어야합니다. 

5.내 닉은 위에있습니다. 연결누른 순간 닉넴이 날라가야겠죠. (소켓에 들어갈떄 가지고 들어가는것입니다.)

6그래서 dos dis 아니고 . oos ois 입니다. 

오브젝트를 보내는 tcpdata 클래스만듭니다. 

kind랑 msg를 받는 친구일겁니다 

트리셋 하나를 통으로 받는 역할이 될껍니다. 

카인드는  - >  전쳇이냐 귓말이냐를 알게 해줄겁니다. 

시리얼 UID고 유번호를 가지고 소통해줄것입니ㅏㄷ.

 

tcp 데이터를 받을것이고요 .

생성은 카인드메시지 매개받아 생성할것

 

처음에 보내는 거에는 first를 받고 kind로.,,  그리고 닉네임을 보내줍니다 연결되는 순간에 말이죠.

 

리시버는 바로 문자받는일이 아니라 .퍼스트일떄는 등록절차를 진행해주어야 함.

 

서버도 마찬가지로 ois oos로 변경. 

스타트가 일어날 떄 ->>   ooi readObject로 받습니다. 

이ㄸ때 당연히 tcpdata로 형변환 해서 읽습니다. td의 kind는 첨에 당연히 first일꺼구.

msg 해당하는것이 리스트에 containskey로 물어봅니다.  =>> 있으면 중복! 없으면 신규등록 

즉 런에 대한 진입여부가 여기서 결딴나야한다.

 

start 발동시에 ->  put으로 넣어줍니다.  특수기호 사이를 네임으로 써야합니다. 

주의할 것은 끊어지는 경우 클라가 나올경우를 따져줄 것.

 

모든이에게 글 보내는건    쩜 벨류즈 하면 됩니다. 

상대방에게 지금 내가 스탠바이인지 아닌지도 시그널이 가야한다. 

send One -메서드 

상대에게 알려주어야 합니다. 

 

보낼떄는이제항상 감싸서 보낼겁니다  server 기준 .,

 

writeobject -> 이렇게 맞춰놔야 나중에 파일도 보낼수있을겁니다. \

 

트리셋보다 벡터인게 더 깔끔할겁니다. 

벡터로 들어가면 자료가 한가지뿐인데 ..

sort라는놈을 오자마자 써주는 것이겠지요 .

 

오고가는거는 셋으로 . 일단 가져와서 내용들은  벡터 처리

 

클라에서  - 연쇄작용으로  마지막에 박스를 바꿔먹기 해줄겁니다 

 

1. 연결할 떄  >>        >> >>   .>>   >>  >> 박스 만져주기.

 

kind의 종류를  최초 or 갱신으로 해준다.?????

 

 

연결 실패나면 열어놓은 걸 다 닫아야 함. ?? ->아 자기 기능들이 다 꺼져야죠. 

종료해주는 메서드 close라는 친구 만들어서 한방에 다꺼주면 편하겠죠?

 

클로즈가. 누구의 클로즈인지를 확인  tcpmulclient. this. close 부모가가진 클로즈를 해주기!!

이렇게 스타트과정은 마무리가되는것.

마지막 짚어갈 스타트의 함정을 따져본다. => 접속 성공 되었으면 . 명단을 내가 소지해야 함.

단순히 서버에서 출력 받아오는게 중요한 것이 아님. 

 

이제는 sendtoAll을 수정. 매개변수 더이상 스트링아니야  tcpdata로 매개받아서 일하라고 지시.

 

생성자의 오버로딩을 활용 하기. . . .. . . 

 

스위치를만들어주고 kind에 따라 갈라져야겠죠 .

case접속자  // default 

스위치 생각도 못했고 기억도 안ㄴ났음.....

 

td의 msg 을  append 해줘야 할것이다 read utf 말고!!! 

 

ㅂ<!--td {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}-->

콤보박스 ㅇ속에 벡터 끼워넣기.

combobox ( td. mem)

시시떄떄로 리셋을해줄것.

 

setPreferredsize ->>  r괄호안에  new dimenstion( xx ,yy) 이런 식으로 사용한다~

 

arr  0번쨰에 w전체를 넣어주기!!

그냥 쏘는경우 .

 

send to One 은 all과 유사하지만 다르게 설계해야함. 

 

ㅡmsg 속에 다 들어있음  () 보내는자 , 보내는 대상. 내용들 다 있음!! list에서  뽑아가져와서 쓴다. 

msg의  kind 한테 쏠꺼야!! 이것이 귓속말. 

 

선생님 답안지는 바운드가 작아서 문제인거같다. 기본 프레임을 쪼금만 키워주자. 

 

++++++++++++++++++++++++++++

오브젝트 인아웃 - > 직렬화 역직렬화 부분이어엇다  다시 공부해야 함.

 

오버헤드 현상에 관한 공부  -> 오버헤드 최적화를 위한 메크로함수와 인라인 함수를 활용한다고 하는데..

뭐하는 녀석들인지 도무지 모르겟다.