linux下 udp通讯问题

cdqy 2011-07-27 05:28:30
我在linux下通过配置service与inetd.conf增加了一个udp的服务,但是我只能收到客户端发过来的信息,而客户端收不到我返回的信息。请问有可能是什么原因?

说明:同样的程序,同样的配置,TCP通讯没有问题

service 文件内容

ndw_gd 2000/tcp
ndw_gd 8000/udp


inetd.conf 文件内容

ndw_gd stream tcp nowait root /etc/ndw_gd ndw_gd 2000
ndw_gd dgram udp wait root /etc/ndw_gd ndw_gd 8000

ndw_gd 程序说明:
将标准的输入输出做为收,发信息
...全文
148 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdqy 2011-08-03
  • 打赏
  • 举报
回复
用的是嵌入式的linux
yanran_hill 2011-07-28
  • 打赏
  • 举报
回复
既然是linux,那么应该可以安装使用tcpdump,这是个抓包工具,也能够抓到udp包的
可以使用这个工具看看udp是否发出去了
cdqy 2011-07-28
  • 打赏
  • 举报
回复
使用nowait的话,也是一样的,而且会生产很多ndw_gd线程
cdqy 2011-07-28
  • 打赏
  • 举报
回复
应该不会是防火墙的问题,因为我写了个小的udp服务端程序,通讯是正常的。

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

#define MAXLINE 80
#define SERV_PORT 8888

void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)
{
int n;
socklen_t len;
char mesg[MAXLINE];

for(;;)
{
len = clilen;
/* waiting for receive data */
n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
/* sent data back to client */
sendto(sockfd, mesg, n, 0, pcliaddr, len);
}
}

int main(void)
{
int sockfd;
struct sockaddr_in servaddr, cliaddr;

sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* create a socket */

/* init servaddr */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);

/* bind address and port to socket */
if(bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1)
{
perror("bind error");
exit(1);
}

do_echo(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr));

return 0;
}
Nosky100 2011-07-27
  • 打赏
  • 举报
回复
发出去了?
会不会是防火墙的问题?
yanran_hill 2011-07-27
  • 打赏
  • 举报
回复
"ndw_gd dgram udp wait root /etc/ndw_gd ndw_gd 8000"
怎么不是nowait呢?

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧