30/09/2018, 18:48
Hàm Listen() Trong winsock không lắng nghe được
Mình đang học lập trình mạng bằng winsock. Trong sách bảo hàm listen() là một vòng lặp , nó sẽ đợi khi có một sock connect tới nó . chả hiểu sao code của mình chưa có cái sock nào kết nối tới mà nó đã thoát vòng lặp rùi
Đoạn code của mình đây:
#include <WinSock2.h>
#include <iostream>
using namespace std;
void main()
{
WSADATA wsaData;
if (WSAStartup(0x101,&wsaData))
{
cout<<"Khong the tao duoc Socket";
system("pause");
return;
}
SOCKADDR_IN IEPServer;
SOCKADDR_IN IEPClient;
int lenClient;
char PCName[20];
gethostname(PCName,20);
HOSTENT *IpPC= gethostbyname(PCName);
char *IPaddr= inet_ntoa(*((in_addr**)IpPC->h_addr_list)[0]);
cout<<"Dia chi IP cua may ban la : "<<IPaddr<<endl;
IEPServer.sin_addr.s_addr=INADDR_ANY;
IEPServer.sin_family=AF_INET;
IEPServer.sin_port=htons(9999);
SOCKET server =socket(AF_INET,SOCK_STREAM,0);
bind(server,(SOCKADDR*)&IEPServer,sizeof(IEPServer));
listen(server,1);
SOCKET sock_client;
sock_client = accept(server,(SOCKADDR*)&IEPClient,&lenClient);
cout<<"Da co ket noi toi server :"<<endl;
char *buff= "Chao ban ! Toi la server";
send(sock_client,buff,strlen(buff),0);
closesocket(server);
WSACleanup();
system("pause");
}
đoạn code trên thì phải khi nào có 1 client kết nối tới nó mới gửi. Vậy mà mình vừa chạy chương trình nó đã gửi rùi
Bài liên quan
Bạn thử đoạn code ví dụ của sách trước xem. Các hàm này ít người dùng nên sẽ lâu có câu trả lời đấy.
listen function
The listen function places a socket in a state in which it is listening for an incoming connection.
Chưa vọc cái thư viện winsock này nên đọc cái này cũng ko hiểu lắm.