Chinaunix

标题: linux 网络编程c/s的问题 [打印本页]

作者: dream0810    时间: 2003-09-25 10:37
标题: linux 网络编程c/s的问题
服务器端程序


/******* 服务器程序 (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[]这个数组是表示什么?????????
作者: 蓝色键盘    时间: 2003-09-25 13:42
标题: linux 网络编程c/s的问题
if(argc!=2) //argc这里表什么???还有为什么不等与2??????还有argv[]这个数组是表示什么?????????

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

以次从0----argc-1。
作者: leonni    时间: 2003-09-25 13:55
标题: linux 网络编程c/s的问题
Usage:%s portnumber\a\n
要求在shell上输入两参数,程序名 端口号
作者: 思一克    时间: 2003-09-25 14:08
标题: linux 网络编程c/s的问题
"
Usage:%s portnumber\a\n
要求在shell上输入两参数,程序名 端口号
"
那ARGC不等于3了吗?
作者: syshunter    时间: 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]
作者: dream0810    时间: 2003-09-25 19:37
标题: linux 网络编程c/s的问题
if(argc!=2) 为什么是argc!=2,不是3或什么别的?
是‘程序名’和‘端口号’吗??????
作者: microshot    时间: 2003-09-25 20:35
标题: linux 网络编程c/s的问题
原帖由 "dream0810" 发表:
if(argc!=2) 为什么是argc!=2,不是3或什么别的?
是‘程序名’和‘端口号’吗??????
   

---------------------------------------------------------
建议查看相关资料,讲述main()函数的,c程序一般的默认main都带有两个参数,自己也算在内。argc=2的意思就是说,当你编译程序后生成的可执行文件执行时,要跟一个参数(注意不是两个),依次类推。。。
作者: dream0810    时间: 2003-09-27 12:20
标题: linux 网络编程c/s的问题
这好像与main()函数的,c程序一般的默认main都带有两个参数无关呀!在linux网络编程里有的地方有fi(argc!=3),还有些地方甚至有if(argc!=7),所以我想知道在这服务器端程序中是为什么??????
作者: mosaic    时间: 2003-09-27 12:41
标题: linux 网络编程c/s的问题
这没什么可以为什么的吧? 需要3个就三个,需要7个就7个。一切都看你的程序需要.
作者: icestare    时间: 2003-09-27 12:44
标题: linux 网络编程c/s的问题
if(argc!=7)……

昏,谁用到6个参数的程序啊……强!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2