MultiThread trong Server/Client

Em có dùng thư viện pthread.h để tạo các thread giao tiếp giữa Server và Client, nhưng chỉ có Server gửi sang cho Client được. Em mới tìm hiểu về vấn đề này chút thôi ạ. Đây là code của Server Side :

//Đây là code của phần phần xử lí thread
void *CheckMes (void* tempsocket)
{
	CSocket *Connector = (CSocket *) tempsocket;
	while (1)
	{
		char tinnhannhanve[128] = {};
		Connector->Receive(tinnhannhanve,128);
		if (strlen(tinnhannhanve) != 0)
		{
			cout << "Client : " << tinnhannhanve << endl;
			cout << "Server : ";
		}
	}
	return NULL;
}
//Đây là một phần code của main sau khi đã create, bind, và listen
if (Server.Accept(Connector) == TRUE)
			{
				cout << "Ket noi client thanh cong !" << endl;
				pthread_t thread_nhan;
				pthread_create(&thread_nhan, NULL, CheckMes,(void *)& Connector);
				while(1)
				{			
					char tinnhanguidi[128] = {};
					cout << "Server : ";
					cin.getline(tinnhanguidi,128);
					Connector.Send(tinnhanguidi,128);
				}
			}

Còn đây là của Client Side (tương tự Server Side) :

//Xử lí thread
void *CheckMes (void* tempsocket)
{
	CSocket *Client = (CSocket *) tempsocket;
	while (1)
	{
		char tinnhannhanve[128] = {};
		Client->Receive(tinnhannhanve,128);
		if (strlen(tinnhannhanve) != 0)
		{
			cout << "Server : " << tinnhannhanve << endl;
			cout << "Client : ";
		}
	}
}
// Một phần code của main sau khi create và kết nối tới ip và port của Server
if (Client.Connect(_T("127.0.0.1"),12345) == 0)
			{
				cout << "Ket noi server thanh cong !" <<endl;
				pthread_t thread_nhan;
				pthread_create(&thread_nhan, NULL, CheckMes,(void *)& Client);
				while(1)
				{
					char tinnhanguidi[128] = {};
					cout << "Client : ";
					cin.getline(tinnhanguidi,128);
					Client.Send(tinnhanguidi,128);
				}
			}

Tới đây em lâm vô ngõ cụt rồi, không biết giải quyết làm sao nữa. Mong mọi người giúp e :slight_smile:

Phần code client của bạn như thế nào?
Tcp gửi nhận thông qua socket mà, bạn dùng thư viện nào thế?
Thay vì posix thread sao không dùng std thread, và dùng asio tcp ip. Ứng dụng không lớn thì async thay vì thread sẽ đơn giản hơn nhiều

2 Likes

Em dùng MFC của Visual Studio để làm ạ, em đọc trên vietjack thấy họ viết cũng khá đơn giản nên e dùng pthread luôn.

Đây là phần code dùng MFC của Client Side trong main ạ (kèm với phần ở trên là chương trình hoàn chỉnh, mấy cái kia thì lặt vặt quá e ko cho vào)

// TODO: code your application's behavior here.
			if (AfxSocketInit() == 0)
			{
				cout << "Khong the khoi dong socket !" <<endl;
				Sleep(2000);
				exit(0);
			};
			CSocket Client;
			Client.Create();
			reconnect:;
			if (Client.Connect(_T("127.0.0.1"),12345) == 0)
			{
				cout << "Ket noi server thanh cong !" <<endl;
				pthread_t thread_nhan;
				pthread_create(&thread_nhan, NULL, CheckMes,(void *)& Client);
				while(1)
				{
					char tinnhanguidi[128] = {};
					cout << "Client : ";
					cin.getline(tinnhanguidi,128);
					Client.Send(tinnhanguidi,128);
				}
			}
			else goto reconnect;

Vậy thì nên đổi tag thành vc++ thay vì c++
Bạn nói chỉ server gửi được về, vậy tức là client đã connect thành công và đã gửi tin nhắn sang cho server rồi?

E dùng điện thoại ko thấy tag vc++, chắc để mai lên máy chỉnh sau.
Chỉ có server gửi tin nhắn qua client được thôi ạ, còn client ko gửi ngược lại cho server được.

Đây là 2 file sln project của Server Side và Client Side, mong mọi người giúp e :blush: (có file exe trong phần debug của cả 2)
Server : http://www.mediafire.com/file/slrr3soy1zr7yr4/Server.rar
Client : http://www.mediafire.com/file/5u735yku73jlymm/Client.rar

Đã giải quyết được, xin close topic.

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