- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
UDP 服务器正在使用 lựa chọn
系统调用接收数据包。我想从每个 UDP 客户端接收最新的数据包。 (我也想听多个 UDP 客户端数据包)。
我的简单 UDP 服务器的代码:
int main(void) {
int fd;
int port = 5678;
char buffer[1024];
fd_set readfs;
socklen_t client_length;
struct timeval timeout_interval;
struct sockaddr_in6 server_addr;
struct sockaddr_in6 client_addr;
int result;
int recv;
char client_addr_ipv6[100];
fd = socket(PF_INET6, SOCK_DGRAM, 0);
printf(" \e[1m \e[34m ---------------------------------------- \n-------------------- UDP SERVER --------------------\n \e[39m \e[0m \n");
printf("Process: \e[34m %d \e[49m Port ..\n", port);
if (fd < 0) {
printf("ERR: fd < 0");
} khác {
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin6_family = AF_INET6;
server_addr.sin6_addr = in6addr_any;
server_addr.sin6_port = htons(port);
memset(&client_addr, 0, sizeof(client_addr));
client_addr.sin6_family = AF_INET6;
client_addr.sin6_addr = in6addr_any;
client_addr.sin6_port = htons(port);
if (bind(fd, (struct sockaddr *) &server_addr, sizeof(server_addr))
>= 0) {
printf("\e[1m INFO: \e[0m \e[34m Bind success.. \e[39m\n");
} khác {
printf("Bind.");
trả về -1;
}
for (;;) {
FD_ZERO(&readfs);
FD_SET(fd, &readfs);
int max_fd = MAX(0, fd);
timeout_interval.tv_sec = 3;
timeout_interval.tv_usec = 50000000;
result = select(max_fd + 1, &readfs, NULL, NULL, &timeout_interval);
//printf("\n %d \t %d \n", result, fd);
if (result < 0) {
printf("ERR\n");
} else if (result == 0) {
printf("\nTimeout\n");
} khác {
if (FD_ISSET(fd, &readfs)) {
client_length = sizeof(client_addr);
if ((recv = recvfrom(fd, buffer, sizeof(buffer), 0,
(struct sockaddr *) &client_addr, &client_length))
< 0) {
printf("Recv-ERR!");
phá vỡ;
}
inet_ntop(AF_INET6, &(client_addr.sin6_addr), client_addr_ipv6, 100);
//printf("Client IP/Port : %s ",client_addr_ipv6);
printf("\n ------------------------------------------ \n");
printf("\e[1m Data: \e[0m \e[32m %.*s \n Client IP/Port : \e[34m %s / %d \n\e[39m", recv, buffer,client_addr_ipv6,ntohs(client_addr.sin6_port));
}
}
}
}
}
câu trả lời hay nhất
处理此问题的最佳方法是让发送方在每个数据包中放置一个序列号。每发出一个数据包,序号加1。
在接收方,您会跟踪收到的最后一个数据包的计数器。如果下一个进来的数据包有一个更大的计数器,它就是最新的。如果它不是更大,则它是一个较旧的数据包,您可以根据您的应用程序以适当的方式处理它。
此外,您应该将 recv
变量重命名为类似 recv_len
的名称。 recv
是将被此变量定义屏蔽的套接字函数的名称。
关于c - 在 udp 服务器中接收最新数据包 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206009/
Tôi mới học về cách tính tổng kiểm tra udp. Nhưng tôi bối rối liệu thuật toán có phát hiện được tất cả lỗi hay không. Câu trả lời tốt nhất tất nhiên là không. Không có tổng kiểm tra nào có thể phát hiện được tất cả các lỗi. Về udp - Tổng kiểm tra UDP có phát hiện được tất cả lỗi không? , chúng tôi đang ở Stack Ove
Có gì sai với chức năng bên dưới?? Nó sẽ báo lỗi vì tôi không có máy chủ UDP chạy trên localhost. int openUdpSocket(int port) { int sock,sin_size;
Tôi đang cố gắng sửa đổi cả hai chương trình. Tôi muốn udpclient.c có thể nhận tin nhắn và udpserver.c gửi lại tin nhắn cho máy khách. Tôi cũng muốn nhận tin nhắn có dấu thời gian từ udpclient trước khi họ gửi chúng. Tin nhắn nhận được sẽ
Tôi có một máy chủ UDP khá đơn giản được viết bằng c. Đôi khi tôi cần biết độ dài hiện tại của tất cả các gói udp (byte) được xếp hàng đợi trong ổ cắm. Theo tôi hiểu, getockopt không nhận được thông tin như vậy. Chào mừng đến với Linux và F
Ai đó có thể cho tôi biết nơi sử dụng giao thức UDP ngoài nhạc/video phát trực tiếp không? Các trường hợp sử dụng mặc định cho UDP là gì? Câu trả lời hay nhất Bất cứ điều gì khác mà bạn cần hiệu suất nhưng có thể tồn tại nếu gói bị mất trên đường đi. Ví dụ: trò chơi nhiều người chơi xuất hiện trong tâm trí
Ngược lại với phương pháp giám sát của TCP, UDP có gửi tất cả các gói ngay khi chúng có sẵn không? Cảm ơn. Câu trả lời hay nhất TCP có kiểm soát tắc nghẽn, UDP thì không vì nó không có kết nối. Nhưng câu hỏi của bạn liên quan đến nhiều vấn đề: việc gửi tin nhắn có khiến tin nhắn được gửi ngay lập tức không
Tôi biết UDP vốn không đáng tin cậy, nhưng khi kết nối với localhost, tôi muốn kernel xử lý kết nối theo cách khác vì mọi thứ đều có thể được xử lý nội bộ. Vì vậy, trong trường hợp cụ thể này, UDP có được coi là một giao thức đáng tin cậy (giao thức
Tôi đang cố gắng phát triển một ứng dụng trò chuyện video trực tiếp bằng flash và giao thức rtmfp nhưng tôi có thắc mắc về cách rtmfp đảm bảo kết nối các thiết bị ngang hàng, đặc biệt khi các thiết bị ngang hàng ở trên các mạng khác nhau. Câu trả lời hay nhất RTMFP dựa vào
Tất cả các triển khai máy chủ TCP mà tôi tìm thấy bằng cách sử dụng Netty 4.0 đều sử dụng phiên bản ServerBootstrap. Sự khác biệt lớn nhất và duy nhất giữa một dịch vụ
Đối với dự án trò chơi MMO cá nhân, tôi đang triển khai giao thức dựa trên UDP đáng tin cậy tự tạo trong java. Với thiết lập hiện tại của tôi, tôi tin rằng việc kẻ rình mò chiếm quyền điều khiển phiên là tương đối đơn giản, vì vậy để ngăn chặn điều này, tôi sử dụng cái này
Tôi đang cố gắng tính toán tổng kiểm tra theo cách thủ công cho các gói UDP khác nhau nhưng tôi luôn nhận được kết quả sai so với kết quả được hiển thị trong Wireshark. Đây là ví dụ về cách tôi thực hiện việc này: Địa chỉ nguồn: 192.168.0.1
Tôi đang cố gắng tính toán tổng kiểm tra theo cách thủ công cho các gói UDP khác nhau nhưng tôi luôn nhận được kết quả sai so với kết quả được hiển thị trong Wireshark. Đây là ví dụ về cách tôi thực hiện việc này: Địa chỉ nguồn: 192.168.0.1
Tôi có một vấn đề kỳ lạ. Tôi có ứng dụng P2P C++ (tăng asio) chạy thành công trên hầu hết các NAT. Vấn đề là khi tôi chỉ định số cổng khởi động ban đầu là 1000, nó sẽ kiểm tra xem 1000 có trống không
Một liên kết vô tuyến ngắn với nguồn dữ liệu yêu cầu thông lượng 1280 Kbps qua IPv6, sử dụng giao thức dừng và chờ UDP, không có máy khách nào khác hoặc nguồn nhiễu rõ ràng trong khu vực. Làm thế quái nào tôi có thể tính được con số tối ưu?
Có vẻ như có thể gửi gói UDP mà không cần tải trọng. Điều duy nhất tôi có thể nghĩ là không yêu cầu tải trọng là đục lỗ NAT. Cái này còn có thể dùng để làm gì nữa? Điều này liên quan đến câu hỏi trước đây của tôi Trong Linux, có thể nhận lại
Tôi có một khách hàng có mã mà tôi không thể thay đổi - nhưng tôi muốn (viết lại) mã bằng ổ cắm ZeroMQ. Máy khách sử dụng cả ổ cắm TCP thô và UDP thô. Tôi biết tôi có thể sử dụng ZMQ_ROUTER_
Web 4.0.24 Tôi đang chuyển XML qua UDP. Khi nhận được gói UPD, độ dài của gói luôn là 2048 và tin nhắn bị cắt bớt. Tuy nhiên, tôi đã thử đặt kích thước bộ đệm nhận thành giá trị lớn hơn (4096, 8192, 65536) nhưng nó
Tôi đang cố gắng viết một chương trình đơn giản về kết nối UDP để hiểu chúng. Tôi đã triển khai một số điều cơ bản nhưng tôi gặp một số vấn đề khi cố gắng gửi và nhận lại những gì tôi đã gửi, chẳng hạn như khi tôi thực hiện việc này;
Khi tôi kiểm tra, máy khách UDP của tôi gửi các gói UDP từ máy chủ cứ sau 100 ms và tần số nhận không bằng 100 ms, đôi khi còn ít hơn nhiều, ví dụ 3 ms...10 ms. Tôi biết máy chủ khách UDP không đồng bộ
Xin chào các bạn, tôi là người mới học winock2. Dưới đây là các chương trình máy chủ và máy khách udp của tôi. Máy khách của chương trình của tôi không biết địa chỉ IP của máy chủ, chỉ biết cổng. Nhưng máy chủ sẽ phát một tin nhắn trên toàn mạng. Khi client nhận được tin nhắn, nó sẽ quay lại
Tôi là một lập trình viên xuất sắc, rất giỏi!