gpt4 book ai didi

C++ UDP 服务器故障

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:18 25 4
gpt4 key购买 nike

在网络中使用 C++ 对我来说是完全神秘的。有人介意帮我解决这段代码中的错误吗?它作为如何不制作 UDP 服务器的示例提供给了我的类(class)。

我已经注意到一些问题,例如缓冲区如何固定为 256 字节长,但在大多数情况下我不明白。我更像是一名 PHP/Java/JavaScript 程序员。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

void error(char *msg)
{
perror(msg);
exit(1);
}

int main(int argc, char *argv[])
{
int sockfd, portno, clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc <= 2) {
fprintf(stderr,"Error, no port provided\n");
exit(1);
}

sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("Error opening socket");

bzero((char *) &cli_addr, sizeof(serv_addr));
portno = atoi(argv[2]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(portno);

if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(cli_addr)) < 0)
error("ERROR on binding");
clilen = sizeof(cli_addr);

while(100)
{
bzero(buffer,256);
n = recvfrom(sockfd,buffer, 0, 255,
(struct sockaddr *) &serv_addr,&clilen);

printf("A client from %s port %d connected\n", inet_aton(cli_addr.sin_addr), htons(cli_addr.sin_port));

if (n < 0) error("Error reading from socket");
printf("Here is the message: %s\n",buffer);
n = sendto(sockfd,"I got your message",18,0,(struct sockaddr *) &serv_addr,sizeof(cli_addr));
if (n < 0) error("Error writing to socket");
}

close(sockfd);
return 0;
}

最佳答案

你试过了吗?使用 nc/aka netcat 也可以尝试发送 UDP 数据包。

哦,这是来自 socket() 手册页的另一条线索

SOCK_STREAM     Provides sequenced, reliable, two-way, connection-based byte streams.   An  out-of-band data transmission mechanism may be supported
SOCK_DGRAM Supports datagrams (connectionless, unreliable messages of a fixed maximum length).

关于缓冲区大小你是对的,虽然它不应该溢出 - 我会使用 2^16 aka 65536 因为这是 IPv4 支持的最大 UDP 数据包

关于C++ UDP 服务器故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7949389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com