Re: Как применить accept?
От: sa83  
Дата: 13.11.04 15:52
Оценка:
Здравствуйте, -SS-, Вы писали:

SS>вообщем создаю сокет

SS>WSADATA WsaData;
SS>SOCKET s;
SS>SOCKET s1;
SS>CSocket sa;
SS>SOCKADDR_IN sin;
SS>BOOL CMyDialog::OnInitDialog()
SS>{
SS> CDialog::OnInitDialog();
SS> int err = WSAStartup (0x0101, &WsaData);
SS> if (err == SOCKET_ERROR)
SS> {
SS> AfxMessageBox("error socket");
SS> return 1;
SS> }
SS> s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SS> sin.sin_family = AF_INET;
SS> sin.sin_port = htons(8423);
SS> sin.sin_addr.s_addr = INADDR_ANY;
SS> err = bind( s, (LPSOCKADDR)&sin, sizeof(sin) );
SS> err = listen( s, SOMAXCONN);

SS>}

SS>Делаю кнопку на диалоге
SS>void CMyDialog::OnBUTTON7()
SS>{
SS> sa.Create();
SS> if (sa.Connect("192.168.10.1",8423))
SS> {
SS> AfxMessageBox("Ok connect ");
SS> }
SS> else
SS> AfxMessageBox("Error Connect");
SS> CString buffer = " Hello World";
SS> sa.Send(buffer, 500, 0);
SS> sa.Close();

SS>}

SS>Когда нажимаю на кнопку, то как и надо появляется сообщение OK connect,
SS>а вот как принять сообщение от sa.Send? Т.е. моя прога как бы себе посылает сообщение,
SS>знаю что нужно использовать accept и recieve, но вот не знаю как это использовать .
SS>Необходима что бы она себе передала Hello World и вывела AfxMessageBox Hello World.
SS>Помогите пожалуйста.

Может, использование потоков поможет?
К примеру:
WSADATA WsaData;
SOCKET s;
SOCKET s1;
CSocket sa;
SOCKADDR_IN sin;
char receiveBuffer[300];
BOOL CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    int err = WSAStartup (0x0101, &WsaData);
    if (err == SOCKET_ERROR)
    {
           AfxMessageBox("error socket");
           return 1;
    }
    s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    sin.sin_family = AF_INET;
    sin.sin_port = htons(8423);
    sin.sin_addr.s_addr = INADDR_ANY;
    err = bind( s, (LPSOCKADDR)&sin, sizeof(sin) );
    err = listen( s, SOMAXCONN);
     AfxBeginThread(receiveThread,&s);
}
 
void CMyDialog::OnBUTTON7()
{
    sa.Create();
        if (sa.Connect("192.168.10.1",8423))
    {
        AfxMessageBox("Ok connect ");
    } 
    else
        AfxMessageBox("Error Connect");
    CString buffer = " Hello World";
        sa.Send(buffer, 500, 0);
    sa.Close(); 
}
UINT receiveThread(LPVOID lParam){
     SOCKET& sock = (SOCKET*)lParam;
     SOCKET socket;
     sockaddr_in sockAddr;
     int lenSockAddr=sizeof(sockAddr);
     if(socket=accept(&sock,(LPSOCKADDR)&sockAddr,&lenSockAddr))!=INVALID_SOCKET) 
     {
          recv(socket,receiveBuffer,sizeof(receiveBuffer),0);
          AfxMessageBox(...);
     }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.