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

Mai Anh Dũng viết 20:55 ngày 30/09/2018

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.

... viết 21:02 ngày 30/09/2018
docs.microsoft.com

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.

Bài liên quan
0