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ạ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.

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.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?