c++ UDP服务器崩溃
C++ UDP server breakdown
c++在网络中使用对我来说是完全神秘的。有人介意帮我分析一下这段代码中的错误吗?这是给我的班级作为一个例子,如何不做一个UDP服务器。
我已经注意到一些问题,比如缓冲区是一个固定的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 providedn");
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 connectedn", inet_aton(cli_addr.sin_addr), htons(cli_addr.sin_port));
if (n < 0) error("Error reading from socket");
printf("Here is the message: %sn",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也就是65536,因为这是IPv4中支持的最大UDP数据包
socket
函数为服务器套接字创建套接字句柄。bind
函数将套接字句柄绑定到指定的IP地址(INADDR_ANY
)和端口(通过serv_addr
)。在while循环中,它通过recvfrom
函数从客户端接收数据并将数据打印出来。sendto
函数将应答发送回客户端。close
函数关闭套接字句柄
相关文章:
- 调试编译的服务器在数据库打开时崩溃
- C/C++ Linux 上的多线程服务器/客户端崩溃
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- VS-2019程序在某些服务器上的第一条浮点指令上崩溃
- 如何调试 gRPC 服务器崩溃而没有任何错误
- GPRC服务器在处理的第二请求下崩溃
- 使用ActiveX服务器调用QCoreApplication :: grainments()崩溃
- 服务器在请求已经处理请求时收到请求时会崩溃
- Unix域套接字(C++)-客户端使服务器守护进程崩溃
- 执行析构函数时,服务器应用程序总是崩溃
- 如果我访问该页面,带有casablanca的http服务器将崩溃
- QTcpSocket/QTCP服务器内存管理/服务器崩溃
- 避免服务器因故障而崩溃".so"
- 带有libpion的服务器在处理请求时崩溃
- C++服务器有时会崩溃
- 在VMWare机器上编译的程序在亚马逊服务器上运行时会因非法指令而崩溃
- Winsock2错误:服务器在连接到客户端时崩溃
- zeromq: PULL/PUSH客户端在连接31后崩溃.windows上的服务器
- OpenMAX AL在信号6 (SIGABRT)时崩溃.媒体服务器死亡
- 与JNI崩溃服务器JVM的访问冲突