C++ 비동기 send recv 문의

익명 사용자의 이미지

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문을 돌려서 계속 읽어들이고,
그 이후에 패킷 처리를 하던데, 이에 맞춘다면 똑같이 반복문 돌려서 데이터 사이즈에 맞게 데이터를 받을때까지 돌리고 그다음에 패킷클래스로 형변환 시켜서 읽어야 하는건가요?

shint의 이미지

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

shint의 이미지

//각 함수의 인자값. 리턴값. 오류값,을 확인해보시기 바랍니다.

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

shint의 이미지

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.