Hỏi về Lập trình mạng bằng WinSock C++

Em muốn hỏi lúc Server gửi 2 xâu về cho Client thì cần dùng đến 2 Socket đã accept hay 1 ạ.

Đây là cách em gửi 2 xâu bằng 1 Socket nhưng không được ạ. Mọi người cho em hỏi sai ở đâu ạ

ret = send(connSock, buff1, sizeof(buff1), 0);
if (ret == SOCKET_ERROR)
    printf("Error: %d", WSAGetLastError());
ret = send(connSock, buff2, sizeof(buff2), 0);
if (ret == SOCKET_ERROR)
    printf("Error: %d", WSAGetLastError());

Không được là như thế nào nhỉ

4 Likes
  • chỉ cần một sock đã kết nối và lần lượt gửi từng cái qua.
  • buff1, buff2 khai báo như thế nào mà không được ?
  • một điều nữa là dữ liệu truyền qua là một stream. Như một dòng nước chảy liên tiếp nên mặc dù gọi hàm send 2 lần tách biệt nhưng không có nghĩa là gọi hàm recv 2 lần thì nó ra 2 chuỗi gốc. Cần phải có cơ chế nào đó để có thể nhận dạng thông tin của 2 hay nhiều chuỗi liên tiếp.
4 Likes

Mình thực sự chưa hiểu lắm. buff1, buff2 mình chỉ khai báo mảng char xong dùng điều kiện để tách buff thành 2 mảng. Còn ở client thì mình không dùng 2 recv mà mình dùng while

Trong while vẫn phải dùng recv hoặc lệnh tương tự ( read ) để đọc từ tream. Không những vậy có thể phải dùng recv/read rất nhiều lần mới đọc hết dữ liệu.

Đoạn code hoặc thuật toán đọc tách thành 2 buff như thế nào ?

3 Likes


Đây bạn ơi, ret là giá trị trả về của hàm recv

Đây chỉ là 2 lệnh gửi (send) chứ có thấy while, recv đâu ?

3 Likes

Đoạn này mình viết cho UDP. Mình chạy được rồi bạn ạ. Cảm ơn bạn nhiều nha
image

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