블로그 이미지
송시혁

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 7. 10. 17:36 네트워크/vmware 실습



아래 그림과 같이 구조체를 만든다. 나중에 이 구조체를 함수의 인자로 넘긴다.

그리고 두 개의 전역변수인 uiUser와 stpLink[MAXUSER]를 유심히 봐야한다.


위의 구조체가 vp로 넘긴다.






아래는 함수의 전체 소스.



아래 그림의 전역변수stTempinfo.uiUser= uiUser;에서 접속자의 번호를 집어넣는다.

그리고 쓰레드를 생성한다.  마지막 인자의 stTempinfo를 ClientRecv함수의 인자로 넘긴다.
stTempinfo의 주소가 vp인자로 넘겨진다. 즉, 구조체가 넘겨지는 것이다. 



함수에서 구조체형 Tinfo stMyInfo를 선언한 뒤, 바로 vp를 대입한다.

물론, 캐스팅을 해줘야하며, vp는 stTempinfo의 주소이기 때문에 포인터 *을 앞에 붙여서 대입한다.

전역변수 구조체 Tinfo형 포인터 배열인 stpLink[]에 인덱스와 대입되는 값을 주의깊게 본다.

이 부분에서 stMyInfo는 클라이언트로부터 송신된 데이터, uiUser, iSock ,tID, (접속자, 번호, 쓰레드 번호)

등 첫 번째 원소인 stMyInfo주소(포인터 배열이기 때문에)에 넣는다. 

아래 0을 집어넣는 것은 main()함수에서 


이 부분때문이다. 여기서 while문을 쓴 이유는 서버에서 ClientRecv()함수가 데이터를 받아 값을 집어넣는 시간을 

벌기 위해서이다. 지연을 시키지 않으면, 현재에 가지고 있는 값을 처리하기도 전에 다음 데이터 값을 덮어씌여버리는

현상이 발생할 수 있기 때문에 while문으로 지연시킨다. ((Tinfo*)vp)->iSock=0;이 실행되면 while문을 빠져나가 아래 코드가 비로소 실행이 된다.




두 번째 빨간색 네모 보류....

배열 인덱스에 해당하는 값을 집어넣고 클라이언트가 로그아웃했을 때의 접속자 번호를 앞으로 당겨 변경하는 코드인데

자세히 모르므로 보류, 나중에 정리 하겠음.











posted by 송시혁