免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2108 | 回复: 9
打印 上一主题 下一主题

linux 网络编程c/s的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-09-25 10:37 |只看该作者 |倒序浏览
服务器端程序


/******* 服务器程序 (server.c) ************/
#include
#include
#include
#include
#include
#include
#include
#include

int main(int argc, char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,portnumber;
char hello[]="Hello! Are You Fine?\n";

if(argc!=2)    //argc这里表什么???还有为什么不等与2??????还有argv[]这个数组是表示什么?????????
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}

if((portnumber=atoi(argv[1]))<0)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}

/* 服务器端开始建立socket描述符 */
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
exit(1);
}

/* 服务器端填充 sockaddr结构 */
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(portnumber);

/* 捆绑sockfd描述符 */
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
exit(1);
}

/* 监听sockfd描述符 */
if(listen(sockfd,5)==-1)
{
fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
exit(1);
}

while(1)
{
/* 服务器阻塞,直到客户程序建立连接 */
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
{
fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
exit(1);
}

fprintf(stderr,"Server get connection from %s\n",
inet_ntoa(client_addr.sin_addr));
if(write(new_fd,hello,strlen(hello))==-1)
{
fprintf(stderr,"Write Error:%s\n",strerror(errno));
exit(1);
}
/* 这个通讯已经结束 */
close(new_fd);
/* 循环下一个 */
}
close(sockfd);
exit(0);
}  

                   argc这里表什么???还有为什么 argc!=2??????还有argv[]这个数组是表示什么?????????

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-09-25 13:42 |只看该作者

linux 网络编程c/s的问题

if(argc!=2) //argc这里表什么???还有为什么不等与2??????还有argv[]这个数组是表示什么?????????

argc表示命令行传入的参数的总个数。
char **argv,这个argv其实就是每个参数保存的地址,

以次从0----argc-1。

论坛徽章:
0
3 [报告]
发表于 2003-09-25 13:55 |只看该作者

linux 网络编程c/s的问题

Usage:%s portnumber\a\n
要求在shell上输入两参数,程序名 端口号

论坛徽章:
0
4 [报告]
发表于 2003-09-25 14:08 |只看该作者

linux 网络编程c/s的问题

"
Usage:%s portnumber\a\n
要求在shell上输入两参数,程序名 端口号
"
那ARGC不等于3了吗?

论坛徽章:
0
5 [报告]
发表于 2003-09-25 16:10 |只看该作者

linux 网络编程c/s的问题

原帖由 "思一克" 发表:
"
Usage:%s portnumber\a\n
要求在shell上输入两参数,程序名 端口号
"
那ARGC不等于3了吗?
   
%a.out ipaddress port
   ~~~  ~~~~~~  ~~~
   argc1     argc2    argc3
   argv[0]  argv[1]  argv[2]

论坛徽章:
0
6 [报告]
发表于 2003-09-25 19:37 |只看该作者

linux 网络编程c/s的问题

if(argc!=2) 为什么是argc!=2,不是3或什么别的?
是‘程序名’和‘端口号’吗??????

论坛徽章:
0
7 [报告]
发表于 2003-09-25 20:35 |只看该作者

linux 网络编程c/s的问题

原帖由 "dream0810" 发表:
if(argc!=2) 为什么是argc!=2,不是3或什么别的?
是‘程序名’和‘端口号’吗??????
   

---------------------------------------------------------
建议查看相关资料,讲述main()函数的,c程序一般的默认main都带有两个参数,自己也算在内。argc=2的意思就是说,当你编译程序后生成的可执行文件执行时,要跟一个参数(注意不是两个),依次类推。。。

论坛徽章:
0
8 [报告]
发表于 2003-09-27 12:20 |只看该作者

linux 网络编程c/s的问题

这好像与main()函数的,c程序一般的默认main都带有两个参数无关呀!在linux网络编程里有的地方有fi(argc!=3),还有些地方甚至有if(argc!=7),所以我想知道在这服务器端程序中是为什么??????

论坛徽章:
0
9 [报告]
发表于 2003-09-27 12:41 |只看该作者

linux 网络编程c/s的问题

这没什么可以为什么的吧? 需要3个就三个,需要7个就7个。一切都看你的程序需要.

论坛徽章:
0
10 [报告]
发表于 2003-09-27 12:44 |只看该作者

linux 网络编程c/s的问题

if(argc!=7)……

昏,谁用到6个参数的程序啊……强!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP