C++ 비동기 send recv 문의
글쓴이: 익명 사용자 / 작성시간: 토, 2018/03/31 - 1:08오전
IOCP서버로 WSASend, WSARecv 로 패킷을 주고 받으려고 하는데
패킷을 클래스화 시켜서 주고 받으려고 합니다.
class Login_Request : PacketHead
{
public:
char ID_value[15];
char PW_value[15];
public:
Login_Request() :ID_value(), PW_value(){}
Login_Request(std::string _ID, std::string _PW) : PacketHead(LOGIN_REQUEST, sizeof(Login_Request))
{
strcpy(ID_value, _ID.c_str());
strcpy(PW_value, _PW.c_str());
}
};이런식인데 일단 에코서버에서 연습삼아 패킷교환 테스트를 할때에는
send로 (char*)선언한 패킷클래스 이런식으로 변환시켜서 바로 받았는데
비동기로 할때도 똑같은가요?
예제를 보니 데이터 사이즈를 읽어서 그 크기가 될때까지 while문을 돌려서 계속 읽어들이고,
그 이후에 패킷 처리를 하던데, 이에 맞춘다면 똑같이 반복문 돌려서 데이터 사이즈에 맞게 데이터를 받을때까지 돌리고 그다음에 패킷클래스로 형변환 시켜서 읽어야 하는건가요?
Forums:

참고해보세요.
MSDN (데브피아. 코드프로젝트. 코드구루) - 윈도우에서 사용합니다.
TCP 통신 - WSASend() WSARecv() WSARecvEx() Send() Recv()
UDP 통신 - sendto() CAsyncSocket::SendToEx() WSARecvFrom() recvfrom()
MAN (KLDP) - 리눅스에서 사용합니다. (윈도우에서 사용하기도 합니다.)
send() recv()
recv man
https://www.google.co.kr/search?dcr=0&biw=1501&bih=822&ei=yLe-WpKVFYWn0gSrrquYAg&q=recv+man&oq=recv+man&gs_l=psy-ab.3..0i7i30k1l9j0i7i10i30k1.13802.14289.0.14432.4.4.0.0.0.0.162.507.1j3.4.0....0...1c.1.64.psy-ab..1.3.413...0.0.q62h5mRtcS8
send man
https://www.google.co.kr/search?dcr=0&biw=1501&bih=822&ei=Ere-Wqv6F4ec0gTnn6YQ&q=send+man&oq=send+man&gs_l=psy-ab.3..0l4j0i30k1l6.177176.180779.0.180969.18.14.4.0.0.0.141.1277.1j10.12.0....0...1c.1j4.64.psy-ab..3.14.1258.0..0i131k1j0i10k1j0i67k1.99.6vZn-TN-3po
WSARecv
https://www.codeproject.com/search.aspx?q=WSARecv&sbo=kw&x=0&y=0
https://www.google.co.kr/search?dcr=0&ei=p7O-WoagMoKw0AS264aQAw&q=WSARecv&oq=WSARecv&gs_l=psy-ab.3..0l10.3095.4668.0.4932.6.3.1.2.3.0.121.331.0j3.3.0....0...1c.1.64.psy-ab..0.5.293....0.R3RD1LRy93k
https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=WSARecv&oquery=WSASend&tqi=TrIzXlpVuEwssaSHJCsssssssMC-454260
http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=WSARecv
https://msdn.microsoft.com/en-us/library/windows/desktop/ms741688(v=vs.85).aspx
AsyncSocket
https://www.codeproject.com/search.aspx?q=AsyncSocket&doctypeid=1%3b2%3b3%3b13%3b14
https://www.google.co.kr/search?dcr=0&ei=nrO-WvWRFMjV0ATL3J6ACQ&q=AsyncSocket&oq=AsyncSocket&gs_l=psy-ab.3..0l6j0i10k1j0j0i10k1l2.52872.52872.0.53214.1.1.0.0.0.0.111.111.0j1.1.0....0...1c.1.64.psy-ab..0.1.109....0.-ym_rvHoywU
https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=AsyncSocket&oquery=WSASend&tqi=TrIzYwpVuEKsssFhtjZssssssL4-355038
https://msdn.microsoft.com/ko-kr/library/3d46645f.aspx
WSASend
https://www.codeproject.com/search.aspx?q=WSASend&sbo=kw&x=0&y=0
https://www.google.co.kr/search?dcr=0&source=hp&ei=N7O-WonLDcW30QSTpZqQCg&q=WSASend&oq=WSASend&gs_l=psy-ab.3..0l10.938.938.0.1286.2.1.0.0.0.0.158.158.0j1.1.0....0...1c.1.64.psy-ab..1.1.157.0...0.eBbq6uNkDUw
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=WSASend
https://msdn.microsoft.com/en-us/library/windows/desktop/ms742203(v=vs.85).aspx
Socket
http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=Socket
http://www.kangcom.com/search/?q=Socket&f=
TCPIP
http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=TCPIP
http://www.kangcom.com/search/?q=TCPIP&f=
OLC 공개 강좌
http://olc.kr/main/index.jsp
Send Socket
https://www.google.co.kr/search?dcr=0&ei=3LW-WrjSBsPP0gSEgo6IDw&q=Send+Socket&oq=Send+Socket&gs_l=psy-ab.3..0l3j0i30k1l7.2451.3676.0.3896.7.5.0.2.2.0.174.676.0j5.5.0....0...1c.1.64.psy-ab..0.7.724...0i67k1.0.9kQqj2oH9yg
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms740149(v=vs.85).aspx
Recv Socket
https://www.google.co.kr/search?dcr=0&ei=4bW-WqvZBMjV0ATL3J6ACQ&q=Recv+Socket&oq=Recv+Socket&gs_l=psy-ab.3..0i7i30k1j0i67k1j0i7i30k1l7j0.39642.40209.0.40374.4.4.0.0.0.0.144.494.1j3.4.0....0...1c.1.64.psy-ab..1.3.403....0._-AjI1IICBQ
Recv MSDN
https://www.google.co.kr/search?dcr=0&biw=1501&bih=822&ei=c7a-WszrJcOl0gTrnLiwBA&q=Recv+MSDN&oq=Recv+MSDN&gs_l=psy-ab.3..0j0i30k1l2j0i8i30k1l4j0i5i30k1l2j0i8i30k1.5841.6307.0.6634.4.4.0.0.0.0.159.537.0j4.4.0....0...1c.1.64.psy-ab..0.4.531....0.yDzNGCGi3NA
https://msdn.microsoft.com/de-de/library/windows/desktop/ms740121(v=vs.85).aspx
WSARecvEx function
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms741684(v=vs.85).aspx
WSASendTo function
https://msdn.microsoft.com/en-us/library/windows/desktop/ms741693(v=vs.85).aspx
WSARecvFrom function
https://msdn.microsoft.com/en-us/library/windows/desktop/ms741686(v=vs.85).aspx
검색 제외
bing
daum
nate
devpia
kldp
동기 비동기 블로킹 논블로킹
https://www.google.co.kr/search?ei=Fb2-WrD1J4jt0gSQyYmoDA&q=%EB%8F%99%EA%B8%B0+%EB%B9%84%EB%8F%99%EA%B8%B0+%EB%B8%94%EB%A1%9C%ED%82%B9+%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9&oq=%EB%8F%99%EA%B8%B0+%EB%B9%84%EB%8F%99%EA%B8%B0+&gs_l=psy-ab.1.7.0l5j0i67k1j0l2j0i30k1l2.4945.4945.0.9019.1.1.0.0.0.0.103.103.0j1.1.0....0...1c.1.64.psy-ab..0.1.102....0.C346xFO7Cp4
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EB%8F%99%EA%B8%B0+%EB%B9%84%EB%8F%99%EA%B8%B0+%EB%B8%94%EB%A1%9C%ED%82%B9+%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9
동기 비동기
https://www.google.co.kr/search?ei=H72-Wu2HJ8K30QT4jLaYBA&q=%EB%8F%99%EA%B8%B0+%EB%B9%84%EB%8F%99%EA%B8%B0&oq=%EB%8F%99%EA%B8%B0+%EB%B9%84%EB%8F%99%EA%B8%B0&gs_l=psy-ab.3..0l3j0i67k1j0l5.27056.27056.0.27425.1.1.0.0.0.0.127.127.0j1.1.0....0...1c.1.64.psy-ab..0.1.126....0._1Ebl1iuB_M
https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EB%8F%99%EA%B8%B0+%EB%B9%84%EB%8F%99%EA%B8%B0&oquery=%EB%8F%99%EA%B8%B0+%EB%B9%84%EB%8F%99%EA%B8%B0+%EB%B8%94%EB%A1%9C%ED%82%B9+%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9&tqi=TrI9KwpySoosstG94qdsssssttZ-419722
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
참고해보세요.
//각 함수의 인자값. 리턴값. 오류값,을 확인해보시기 바랍니다.
http://codepad.org/a27QWuKg
#include <stdio.h> int main() { { //명시적 형변환 - 형변환시 데이터 형을 (int) 적어줍니다. int a = 500; printf("int a %d\n", a); //int a 500 char b = (int)a; //명시적 형변환 - 1바이트에 4바이트 값을 넣으면 손실 printf("char b %d\n", b); //char b -12 float c = a; // printf("float c %f\n", c); //float c 500.000000 } { //묵시적 형변환 - 데이터형을 적어주지 않습니다. 자동으로 변환 int a = 500; float b = a; //묵시적 형변환 발생 } { //signed unsigned 데이터의 범위를 지정해줍니다. //https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=signed+unsigned //https://www.google.co.kr/search?source=hp&ei=GMK-WrvpE8T-0gTVmrqIAg&q=signed+unsigned&oq=signed+unsigned&gs_l=psy-ab.3..0l10.844.844.0.1355.2.1.0.0.0.0.103.103.0j1.1.0....0...1c.1.64.psy-ab..1.1.102.0...0.6XOWQnfPP1E int a = 500; unsigned b = a; printf("unsigned b = int a %d\n", b); //unsigned b = int a 500 unsigned int c = 500; int d = c; printf("int d = unsigned int c %d\n", d); //int d = unsigned int c 500 } //포인터의 크기는 데이터형과 상관없이 같습니다. printf("sizeof(char*) %d\n", sizeof(char*)); //sizeof(char*) 4 printf("sizeof(int*) %d\n", sizeof(int*)); //sizeof(int*) 4 printf("sizeof(float*) %d\n", sizeof(float*)); //sizeof(float*) 4 printf("sizeof(double*) %d\n", sizeof(double*)); //sizeof(double*) 4 printf("sizeof(char) %d\n", sizeof(char)); //sizeof(char) 1 printf("sizeof(int) %d\n", sizeof(int)); //sizeof(int) 4 printf("sizeof(float) %d\n", sizeof(float)); //sizeof(float) 4 printf("sizeof(double) %d\n", sizeof(double)); //sizeof(double) 8 printf("sizeof(unsigned char) %d\n", sizeof(unsigned char)); //sizeof(unsigned char) 1 printf("sizeof(unsigned int) %d\n", sizeof(unsigned int)); //sizeof(unsigned int) 4 //printf("sizeof(unsigned float) %d\n", sizeof(unsigned float)); //printf("sizeof(unsigned double) %d\n", sizeof(unsigned double)); //포인터의 크기는 운영체제의 비트와 관계가 있습니다. //윈도우32비트 4바이트 //윈도우64비트 8바이트 return 0; }unsigned printf
https://www.google.co.kr/search?source=hp&ei=dvq_WorBJILw0ATV8J_IDg&q=unsigned+printf&oq=unsigned+printf&gs_l=psy-ab.3...16720.21795.0.21959.17.13.0.0.0.0.0.0..0.0....0...1c.1.64.psy-ab..17.0.0.0...0.NihaaDbLmpc
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=unsigned+printf
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
겸사 겸사 클래스도 확인
http://codepad.org/s5M3mfii
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string> using namespace std; typedef struct DF_LOGIN_REQUEST { int a; }LOGIN_REQUEST; LOGIN_REQUEST lr; class PacketHead { public: PacketHead(){ cout << "PacketHead()" << endl; } PacketHead(LOGIN_REQUEST lr, int size) { cout << "PacketHead( lr, size)" << endl; } virtual ~PacketHead(){ cout << "virtual ~PacketHead()" << endl; } }; class Login_Request : PacketHead { public: char ID_value[15]; char PW_value[15]; public: Login_Request() :ID_value(), PW_value(){ cout << "Login_Request()" << endl; } Login_Request(string _ID, string _PW) : PacketHead(lr, sizeof(Login_Request)) { strcpy(ID_value, _ID.c_str()); strcpy(PW_value, _PW.c_str()); cout << "ID_value : " << ID_value << endl; cout << "_ID : " << _ID << endl; cout << "_ID : " << _ID.c_str() << endl; } virtual ~Login_Request(){ cout << "virtual ~Login_Request()" << endl; } }; int main() { Login_Request l1; Login_Request l2("test1", "test2"); return 0; }//출력 결과
PacketHead()
Login_Request()
PacketHead( lr, size)
ID_value : test1
_ID : test1
_ID : test1
virtual ~Login_Request()
virtual ~PacketHead()
virtual ~Login_Request()
virtual ~PacketHead()
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기