【发布时间】:2010-12-22 04:47:42
【问题描述】:
我正在处理课堂作业问题。我想启动一个侦听文件请求的 UDP 服务器。它打开文件并使用 UDP 将其发送回请求客户端。
这是服务器代码。
// Create UDP Socket
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("Can't create socket");
exit(-1);
}
// Configure socket
memset(&server, 0, sizeof server);
server.sin_family = AF_INET; // Use IPv4
server.sin_addr.s_addr = htonl(INADDR_ANY); // My IP
server.sin_port = htons(atoi(argv[1])); // Server Port
// Bind socket
if ((bind(sockfd, (struct sockaddr *) &server, sizeof(server))) == -1) {
close(sockfd);
perror("Can't bind");
}
printf("listener: waiting to recvfrom...\n");
if (listen(sockfd, 5) == -1) {
perror("Can't listen for connections");
exit(-1);
}
while (1) {
client_len = sizeof(struct sockaddr_in);
newsockfd = accept(sockfd, (struct sockaddr*)&client,&client_len);
if (newsockfd < 0) {
perror("ERROR on accept");
}
// Some how parse request
// I do I use recv or recvfrom?
// I do I make new UDP socket to send data back to client?
sendFile(newsockfd, filename);
close(newsockfd);
}
close(sockfd);
我有点迷路了如何从客户端接收数据?以及如何与客户端建立新的 UDP 连接?
【问题讨论】:
-
您应该咨询Beej's Guide to Network Programming。它详细介绍了网络编程的基础知识。它涵盖了第 5 章中的系统调用,您可以在其中找到有关
recv和recvfrom的信息。