SOCKET soc = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(2000);
sin.sin_addr.s_addr = INADDR_ANY;
int err = bind(soc,(LPSOCKADDR)&sin,sizeof(sin));
err = listen(soc,SOMAXCONN) ;
SOCKADDR_IN from;
int fromlen = sizeof(from);
SOCKET socin = accept(soc,(LPSOCKADDR)&from,&fromlen);
char *Buf;
Buf = new char[2];
while(recv(socin,Buf,sizeof(Buf),0)!=SOCKET_ERROR) AfxMessageBox(Buf);
Работа с сетью
Сервер:
Код:
Клиент:
Код:
SOCKET soc = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(2000);
sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
connect(soc,(LPSOCKADDR)&sin,sizeof(SOCKADDR_IN));
char *Msg;
Msg = new char[2];
Msg = "aa";
send(soc,Msg,sizeof(Msg),MSG_DONTROUTE);
closesocket(soc);
return 0;
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(2000);
sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
connect(soc,(LPSOCKADDR)&sin,sizeof(SOCKADDR_IN));
char *Msg;
Msg = new char[2];
Msg = "aa";
send(soc,Msg,sizeof(Msg),MSG_DONTROUTE);
closesocket(soc);
return 0;
Проблема в том, что после завершения работы потока клиента на сервере постоянно начинает вылезать AfxMessageBox(...) , как будто постоянно происходит передача данных от клиента. В мсдн написано, что перед closesocket необходимо вызвать shutdown только у меня стоит 6 студия и она не хочет понимать второй параметр передаваемый в эту функцию SD_SEND и другие тоже. Вопрос: как закрыть сокет клиента?
Код:
while(recv(socin,Buf,sizeof(Buf),0)!=SOCKET_ERROR) AfxMessageB(Buf);
заменить вот этой:
Код:
while(recv(socin,Buf,sizeof(Buf),0) > 0) AfxMessageBox(Buf);
Да. Так работает. Спасибо.