最新主题
最优秀的发帖人
Yangrousi (3703) | ||||
Cathiec (2165) | ||||
Rousiyang (1680) | ||||
Kramer (1334) | ||||
TehDDA (1131) | ||||
云朵 (712) | ||||
avacyn (401) | ||||
大菊花 (296) | ||||
xintiaoboy (273) | ||||
Cryingclown (254) |
登录
软件编程方面的问题,请教一下高手。
3 posters
软件编程方面的问题,请教一下高手。
由于自身专业在软件编程方面研究不够深入,所以遇到疑问,求指导。
谢谢。
现在在研究一个基于UDP的IPv6的数据交互程序。
简单介绍下:C语言写,sender发送一个文件,receiver接受信息,go-back-n窗口滑动协议。
sender这一方,main函数头
int main(int argc,char * argv[])
{
unsigned short port = 9000;
char fn[100];
printf("Input the filename: ");
gets(fn);
fp = fopen(fn,"r");
if(fp == NULL)
{
printf("Can't find the file.\n");
return 0;
}
signal(SIGTERM, exit_handler);
signal(SIGINT, exit_handler);
sockaddr_len = sizeof(struct sockaddr_in6);
int port;
scanf("%s", &port);
char ip[100];
gets(ip);
/* creat UDP SOCKET*/
udp_fd = socket(PF_INET6, SOCK_DGRAM, 0);
if(udp_fd == -1)
{
perror("socket");
}
/* connection */
memset((void *)&server_addr, 0, sizeof(server_addr));
server_addr.sin6_family = AF_INET6;
server_addr.sin6_port = htons(port);
inet_pton(AF_INET6, ip, (void *)&(server_addr.sin6_addr));
printf("Target receiver : %s:%d\n", ip, port);
我们负责人是软件工程专业的,他表示对这个程序头很不满,要我们重新做,
(负责人还说printf scanf什么的函数不要用,说工业运用上标准流不一样,我不明白什么意思)
然后负责人说下个星期派人过来教我们。
并且这程序在linux下执行会出错,windows下没有问题,运行的很好,不明白负责人为什么那么反感。
总之负责人很生气,我也很郁闷,不知道哪里不好,能不能指点下。
谢谢了
谢谢。
现在在研究一个基于UDP的IPv6的数据交互程序。
简单介绍下:C语言写,sender发送一个文件,receiver接受信息,go-back-n窗口滑动协议。
sender这一方,main函数头
int main(int argc,char * argv[])
{
unsigned short port = 9000;
char fn[100];
printf("Input the filename: ");
gets(fn);
fp = fopen(fn,"r");
if(fp == NULL)
{
printf("Can't find the file.\n");
return 0;
}
signal(SIGTERM, exit_handler);
signal(SIGINT, exit_handler);
sockaddr_len = sizeof(struct sockaddr_in6);
int port;
scanf("%s", &port);
char ip[100];
gets(ip);
/* creat UDP SOCKET*/
udp_fd = socket(PF_INET6, SOCK_DGRAM, 0);
if(udp_fd == -1)
{
perror("socket");
}
/* connection */
memset((void *)&server_addr, 0, sizeof(server_addr));
server_addr.sin6_family = AF_INET6;
server_addr.sin6_port = htons(port);
inet_pton(AF_INET6, ip, (void *)&(server_addr.sin6_addr));
printf("Target receiver : %s:%d\n", ip, port);
我们负责人是软件工程专业的,他表示对这个程序头很不满,要我们重新做,
(负责人还说printf scanf什么的函数不要用,说工业运用上标准流不一样,我不明白什么意思)
然后负责人说下个星期派人过来教我们。
并且这程序在linux下执行会出错,windows下没有问题,运行的很好,不明白负责人为什么那么反感。
总之负责人很生气,我也很郁闷,不知道哪里不好,能不能指点下。
谢谢了
由colorjack于周五 15 十一月 - 23:14进行了最后一次编辑,总共编辑了1次
colorjack- 论坛普通会员
- 帖子数 : 224
注册日期 : 12-10-31
回复: 软件编程方面的问题,请教一下高手。
int main(int argc,char * argv[])
//argv[1] -> filename
//argv[2] -> port number(9000 by default)
//argv[3] -> ip(::1 by default)
{
unsigned short port = 9000;
unsigned char ip[512] = "::1";
if(argc > 1)
fp = fopen(argv[1],"rt");
if(fp == NULL)
{
printf("Can't find the file.\n");
return 1;
}
signal(SIGTERM, exit_handler);
signal(SIGINT, exit_handler);
sockaddr_len = sizeof(struct sockaddr_in6);
if(argc > 2)
port = (unsigned short)atoi(argv[2]);
if(argc > 3)
strncpy(ip, argv[3], sizeof(ip) - 1);
/* creat UDP SOCKET*/
udp_fd = socket(PF_INET6, SOCK_DGRAM, 0);
if(udp_fd == -1)
{
perror("socket");
}
/* connection */
memset((void *)&server_addr, 0, sizeof(server_addr));
server_addr.sin6_family = AF_INET6;
server_addr.sin6_port = htons(port);
inet_pton(AF_INET6, ip, (void *)&(server_addr.sin6_addr));
fprintf(stdout, "Target receiver : %s:%d\n", ip, port);
分析一下:
1。数据交互中,像文件名,IP地址这类的东西不要手动输入,全部都作为main的参数传入,否则兼容性太差,平台支持的能力也很差。
2.printf不要用,用fprintf给参数stdout。
3.我就按着你代码的模式直接改写的,你的代码移植性太差,注释太少,函数分类也不够好。
4.ipv6的协议下,你的ip地址100是不行的,用unsigned char,大小512.
暂时就想到这么多
//argv[1] -> filename
//argv[2] -> port number(9000 by default)
//argv[3] -> ip(::1 by default)
{
unsigned short port = 9000;
unsigned char ip[512] = "::1";
if(argc > 1)
fp = fopen(argv[1],"rt");
if(fp == NULL)
{
printf("Can't find the file.\n");
return 1;
}
signal(SIGTERM, exit_handler);
signal(SIGINT, exit_handler);
sockaddr_len = sizeof(struct sockaddr_in6);
if(argc > 2)
port = (unsigned short)atoi(argv[2]);
if(argc > 3)
strncpy(ip, argv[3], sizeof(ip) - 1);
/* creat UDP SOCKET*/
udp_fd = socket(PF_INET6, SOCK_DGRAM, 0);
if(udp_fd == -1)
{
perror("socket");
}
/* connection */
memset((void *)&server_addr, 0, sizeof(server_addr));
server_addr.sin6_family = AF_INET6;
server_addr.sin6_port = htons(port);
inet_pton(AF_INET6, ip, (void *)&(server_addr.sin6_addr));
fprintf(stdout, "Target receiver : %s:%d\n", ip, port);
分析一下:
1。数据交互中,像文件名,IP地址这类的东西不要手动输入,全部都作为main的参数传入,否则兼容性太差,平台支持的能力也很差。
2.printf不要用,用fprintf给参数stdout。
3.我就按着你代码的模式直接改写的,你的代码移植性太差,注释太少,函数分类也不够好。
4.ipv6的协议下,你的ip地址100是不行的,用unsigned char,大小512.
暂时就想到这么多
Cathiec- 救世主
- 帖子数 : 2165
注册日期 : 12-10-22
回复: 软件编程方面的问题,请教一下高手。
啊,非常感谢!不愧是专业人士啊。。。
unsigned char的优势在哪里?
我一般就用char了,但是别人很多专业人士都用unsigned int啊unsigned char啊。。。
unsigned char的优势在哪里?
我一般就用char了,但是别人很多专业人士都用unsigned int啊unsigned char啊。。。
colorjack- 论坛普通会员
- 帖子数 : 224
注册日期 : 12-10-31
回复: 软件编程方面的问题,请教一下高手。
交流交流,别客气。。。colorjack 写道:谢谢你了,我这两天再去研究下。
有结果了在论坛上发给你,求指导!
我的水平还没资格指导你。。。
Cathiec- 救世主
- 帖子数 : 2165
注册日期 : 12-10-22
回复: 软件编程方面的问题,请教一下高手。
偶尔上来看看。Yangrousi 写道:colorjack是不喝酒不上论坛啊
看看你们有什么经验可以分享的
colorjack- 论坛普通会员
- 帖子数 : 224
注册日期 : 12-10-31
回复: 软件编程方面的问题,请教一下高手。
有空来指导我们..colorjack 写道:偶尔上来看看。Yangrousi 写道:colorjack是不喝酒不上论坛啊
看看你们有什么经验可以分享的
Yangrousi- 论坛超级会员
- 帖子数 : 3703
注册日期 : 12-10-22
您在这个论坛的权限:
您不能在这个论坛回复主题
周五 24 七月 - 14:02 由 TehDDA
» 好好学习贴
周一 9 三月 - 23:00 由 Yangrousi
» [2014年7月]第二十二期水楼
周六 20 九月 - 17:22 由 Yangrousi
» 世界杯吐槽帖
周五 4 七月 - 14:15 由 Cathiec
» [2014年6月]第二十一期水楼
周四 3 七月 - 21:31 由 大菊花
» [2014年5月]第二十期水楼
周五 23 五月 - 7:43 由 Yangrousi
» C和C++集中交流帖
周三 7 五月 - 15:44 由 Cathiec
» [2014年4月]第十九期水楼
周日 27 四月 - 12:16 由 Yangrousi
» 【本版特典】故事接龙(规则说明及讨论)
周日 27 四月 - 12:00 由 Yangrousi
» [2014年3月]第十八期水楼
周三 2 四月 - 9:35 由 Cathiec