linux系统下进行modbusTCP开发的端口问题 点击:2359 | 回复:4



如火

    
  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2005-12-14 15:05:00
楼主
     我们知道MODBUS/TCP的访问端口一般默认为 502.但是在linux下开发时要注意502端口在默认状态下禁止应用软件使用。必须通过获得系统的修改权限方可以调用。 
例如:下面的程序

 int sockfd, i;
 struct sockaddr_in address;
 size_t addrlength = sizeof(struct sockaddr_in);
 
 if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
  printf("error on socket\n");
  
 i = 1;  
 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
 
 address.sin_family = AF_INET;
 address.sin_port = htons(PORT_NUMBER);
 memset(&address.sin_addr, 0, sizeof(address.sin_addr));
 
 if (bind(sockfd, (struct sockaddr *) &address, sizeof(address)))
  printf("error on bind\n");
  
 if (listen(sockfd, 5))
  printf("error on listen\n");

在开始编译执行时,提示错误:"error on bind". (with #define PORT_NUMBER 502) 

如果我们把它定义为2233,那么就不会有问题,如: #define PORT_NUMBER 2233 
这是因为1024以下的端口都是系统保留端口,只有拥有id 0或者 CAP_NET_BIND_SERVICE 能使用它们进行通讯,
使用:RTFM capabilities(7): 后将会获得CAP_NET_BIND_SERVICE 权利。



一个好人!

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2002年11月19日
发表于:2006-05-14 10:38:00
1楼
请教:什么是MODIBUS TCP,与MODIBUS及TCP/IP有何区别!

一个好人!

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2002年11月19日
发表于:2006-05-14 10:38:00
2楼
请教:什么是MODIBUS TCP,与MODIBUS及TCP/IP有何区别!
3726810@163.com

如火

  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-05-16 13:50:00
3楼
MODBUS TCP是modbus在以太网上的通讯方式,MODBUS支持RTU、ASCII、TCP/IP方式进行通讯。

青峰

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 96回
  • 年度积分:0
  • 历史总积分:175
  • 注册:2002年6月10日
发表于:2006-05-17 12:12:00
4楼
我也来好好的学习一下新的东西,对我来说的

热门招聘
相关主题

官方公众号

智造工程师