Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Tạo multi kết nối client-server cùng một lúc với socket/tcpclient

16:28 01-11-2023 1.215 lượt xem 0 bình luận

Hi team, 
Hiện tại mình có tạo 1 application winform kết nối từ client với server. Winform chỉ cần khai báo IP/Port, sau đó nhấn bắt đầu, sẽ kết nối đến server. Nó hoạt động bình thường. Bây giờ mình muốn tạo nhiều kết nối từ client và server. Nếu mình mở nhiều cửa sổ ứng dụng winform, sau đó khai báo các IP/Port và nhấn kết nối, client vẫn kết nối được với server. Vấn đề bây giờ là mình muốn chỉ trong 1 cửa sổ ứng dụng winform, client khai báo list chứa nhiều ip/port. Sau đó chỉ cần nhấn bắt đầu, sẽ có kết nối giữa client-server theo list các ip/port mà client đã khai báo.
VD 1: kết nối 1 client-server 
Server: 10.240.10.100
Client: 10.240.1.10 Port 7777
Trên winform , khi Client nhấn nút bắt đầu thì kết nối đến server , và mình kiểm tra trong cmd bằng command netstat -a -n
  TCP    10.240.1.10:7777     10.240.10.100:56162    ESTABLISHED
VD 2: kết nối list client-server . Trên client sẽ có listbox chứa danh sách các IP/Port :
10.240.1.10 Port 7777, 
10.240.1.10 Port 8888, 
10.240.1.10 Port 9999.
Mình muốn trên winform , Client khai báo list danh sách IP/Port, sau đó chỉ cần nhấn bắt đầu. Sẽ lần lượt kết nối đến server. Các dữ liệu gửi/nhận của từng kết nối riêng biệt. Kết quả sẽ kiểu như dưới đây
   TCP    10.240.1.10:7777     10.240.10.100:34562    ESTABLISHED
  TCP    10.240.1.10:8888     10.240.10.100:61233   ESTABLISHED
  TCP    10.240.1.10:9999     10.240.10.100:43221    ESTABLISHED
 

private async void _startconnect(string ip, int port)
{
	try
	{
				private TcpListener listener;
				private Socket socket;
				private NetworkStream stream;
				listener = new TcpListener(IPAddress.Parse(_ip), _port);
                listener.Start();
                socket = listener.AcceptSocket();
				socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
                socket.SendTimeout = 180000;
                socket.ReceiveTimeout = 180000;
                stream = new NetworkStream(socket);
				while(true)
				{
					//code receive byte and send byte
				}
	}
	catch (Exception ex)
    {
		MessageBox.Show(ex.Message);
	}

}

private async Task Start_Connect(string _ip, int _port)
{
            await Task.Run(() =>
            {
                _startconnect(_ip, _port);
                Task.Delay(300).Wait();
            });
}

private async void bt_batdau_Click(object sender, EventArgs e)
{
      await Start_Connect(txt_ip.Text.Trim(), Int32.Parse(txt_port.Text.Trim()));
}









 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập

Câu hỏi mới nhất