如何创建在C UDP服务器? [英] How to create a UDP server in C?
问题描述
我想用C编写一个UDP服务器(Linux下)。我知道,在插座()
的功能,我必须使用 SOCK_DGRAM
,而不是 SOCK_STREAM
。
IF((list_s =插座(AF_INET,SOCK_DGRAM,IPPROTO_UDP))小于0)
{
fprintf中(标准错误,ERROR);
}
但现在,当我尝试运行程序(汇编没有错误),它说,没有在错误听()
。这里是调用它:
如果(听(list_s,5)℃下)
{
fprintf中(标准错误,ERROR监听);
出口(EXIT_FAILURE);
}
你能弄清楚的问题是什么?这是code:
INT list_s; / *监听套接字* /
INT conn_s; / *连接插座* /
短整型口; / *端口号* /
结构SOCKADDR_IN servaddr; / *套接字地址结构* /如果((list_s =插座(AF_INET,SOCK_DGRAM,IPPROTO_UDP))小于0)
{
fprintf中(标准错误,错误。\\ n);
}memset的(安培; servaddr,0,sizeof的(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(端口);如果(绑定(list_s,(结构sockaddr *)及servaddr,sizeof的(servaddr))小于0)
{
fprintf中(标准错误,错误BIND \\ n);
}如果(听(list_s,5)℃的)// AL POSTO DI 5 LISTENQ
{
fprintf中(标准错误,错误LISTEN \\ n);
出口(EXIT_FAILURE);
}
您不能听
数据报套接字,它根本就没有为它定义。你只需要绑定
并开始阅读在一个循环中。
作为一个简短的说明,听
通知,它应该期望OS的连接的那个插座上,并且你会接受他们在稍后的时间。显然,这是没有意义的数据报套接字,从而错误。
旁注:你应该尝试使用 PERROR
打印这样的错误。在这种情况下,将(可能)曾经说过的不支持操作的
I'm trying to write a UDP server in C (under Linux). I know that in the socket()
function I must use SOCK_DGRAM
and not SOCK_STREAM
.
if ( (list_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 )
{
fprintf(stderr, "ERROR");
}
But now, when I try to run the program (no errors in compiling), it says that there is an error in listen()
. Here is the call to it:
if (listen(list_s, 5) < 0)
{
fprintf(stderr, "ERROR IN LISTEN");
exit(EXIT_FAILURE);
}
Can you figure out what the problem is? This is the code:
int list_s; /* listening socket */
int conn_s; /* connection socket */
short int port; /* port number */
struct sockaddr_in servaddr; /* socket address structure */
if ( (list_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 )
{
fprintf(stderr, "ERROR\n");
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port);
if ( bind(list_s, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 )
{
fprintf(stderr, "ERROR IN BIND \n");
}
if ( listen(list_s, 5) < 0 ) // AL POSTO DI 5 LISTENQ
{
fprintf(stderr, "ERROR IN LISTEN\n");
exit(EXIT_FAILURE);
}
You can't listen
on a datagram socket, it's simply not defined for it. You only need to bind
and start reading in a loop.
As a short explanation, listen
informs the OS that it should expect connections on that socket, and that you're going to accept them at a later time. Obviously that doesn't make sense for datagram sockets, thus the error.
Side note: you should try to use perror
to print such errors. In this case it would (likely) have said Operation not supported.
这篇关于如何创建在C UDP服务器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!