Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DockerVolume
- Ubuntu VirtualBox
- DockerWindows
- mongodb readonly
- Wake On Lan
- 윈도우10 Wake On Lan
- dotnet Core
- wol
- mongodb pss
- IOCP 서버
- .dotnet Core 3.1 Install
- mongo docker
- ubuntu .net Core
- VirtualBox Ubuntu
- docker
- Ubuntu Server VirtualBox
- .netCore3.1
- MySQL
- DockerDesktop
- 우분투서버가상머신
- 윈도우10 WOL
- 닷넷코어
- .netCore Install
- IOCP 클라이언트
- Winsock
- Volume Mount
- 도커마운트
- Docker오류
- docker desktop
- IOCP
Archives
- Today
- Total
;
Winsock 구조체 데이터 보내고 받기 본문
반응형
1. 우선 자신이 원하는 구조체를 만들고, 구조체를 선언 한다.
1 2 3 4 5 6 7 8 9 10 11 | typedef struct Player_Socket { float x, y, z; float camxrotate, camyrotate; bool live; bool team; char nickName[16]; int character_down_state; }Player_Socket; Player_Socket player; |
2. 구조체를 보내는 방법 ( 고정+가변 길이 )
- 먼저 데이터의 크기를 보낸후, 실제 구조체를 보낸다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int retval; // 데이터 보내기( 구조체 크기를 먼저 보낸다. ) int len = sizeof ( player ); retval = send( sock, ( char *)&len, sizeof ( int ), 0 ); if ( retval == SOCKET_ERROR ) { err_display( "send()" ); exit ( 1 ); } // 데이터 보내기( 구조체 데이터를 보낸다. ) retval = send( sock, ( char *)&player, sizeof ( Player_Socket ), 0 ); if ( retval == SOCKET_ERROR ) { err_display( "send()" ); exit ( 1 ); } |
3.구조체를 받는 방법 ( 고정 + 가변 길이 )
- 함수로 제작을 하여 sock를 받아와 서버에서 전송된 구조체를
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 | Player_Socket recv_Player( SOCKET sock ) { int retval; int len; retval = recvn( sock, ( char *)&len, sizeof ( int ), 0 ); // 데이터 받기(고정 길이) if ( retval == SOCKET_ERROR ) { err_display( "recv()" ); } int GetSize; char suBuffer[BUFSIZE]; Player_Socket *player; GetSize = recv( sock, suBuffer, len, 0 ); if ( GetSize == SOCKET_ERROR ) { exit ( 1 ); } suBuffer[GetSize] = '\0' ; player = (Player_Socket*)suBuffer; return *player; } /* 새로운 구조체 : server_data 함수 : recv_Player 소켓 : sock server_data = recv_Player( sock ); */ |
반응형
'C, C++, C#' 카테고리의 다른 글
C# 특정글자 파싱하기 SplitParsing (2) | 2017.06.28 |
---|---|
C언어 ODBC를 이용하여 특정 아이디의 데이터 찾아 뿌려주기 (0) | 2017.05.31 |
IOCP 구조체 전송 & 구조체 받기 (0) | 2016.12.04 |
IOCP Server[에코서버], Client (0) | 2016.12.03 |
Winsock TCP 성능 향상 - setscokopt() (0) | 2016.12.01 |