C 从用户处读取端口号
我声明我是C语言的初学者。 我正在用C编写一个服务器,代码如下:C 从用户处读取端口号,c,input,C,Input,我声明我是C语言的初学者。 我正在用C编写一个服务器,代码如下: int main(int argc, char **argv) { ds_socket = socket(AF_INET,SOCK_STREAM,0); if(ds_socket == -1) errore_exit("creation socket"); struct sockaddr_in server; struct sockaddr client;
int main(int argc, char **argv)
{
ds_socket = socket(AF_INET,SOCK_STREAM,0);
if(ds_socket == -1)
errore_exit("creation socket");
struct sockaddr_in server;
struct sockaddr client;
//set sockadrr_in
server.sin_family = AF_INET;
server.sin_port = htons(9999);
server.sin_addr.s_addr = INADDR_ANY;
//binding
if(bind(ds_socket, &server,sizeof(server)) == -1)
errore_exit("binding");
if(listen(ds_socket,1000) == -1)
errore_exit("listen");
client_socket = accept(ds_socket,&client,&(sizeof(client)));
if(client_socket == -1)
errore_exit("accept");
}
在设置结构服务器时,我使用了大量的任意端口(9999),但我希望以这种方式实现它:服务器在使用绑定为套接字分配地址之前向用户询问端口号。用户通过键盘输入端口号,服务器保存在变量“port”中,然后将该变量传递到结构的设置中
我不能完成刚才描述的最后一部分:有人能帮我吗?使用
scanf
读取用户输入
int var;
scanf("%d", &var);
现在var
包含用户键入的整数
您会注意到格式说明符与printf
()非常相似
scanf返回它成功读取的值的数量。所以,为了确保用户输入一个数字,请检查scanf是否返回1
scanf的一个问题是,它在stdin
中留下一个尾随的换行符。因此,您需要冲洗它:
void flush()
{
int c;
while ((c = getchar()) != '\n')
;
}
这将消耗所有字符,直到看到换行符为止。但不要使用fflush(stdin)
进行刷新
阅读K&R中的scanf(第128页,第7.4节):
完整的scanf示例:
int main()
{
int age;
printf("What is your age?");
if (scanf("%d", &age) > 0)
printf("You are %d yrs old", age);
else
fprintf(stderr, "Numbers only!");
flush(); /* use the flush function shown above*/
return 0;
}
困难是什么?关于如何读取用户输入的RTFM应该出现在任何书籍或教程的早期。你以前没做过吗?闻起来像是家庭作业……你真正的问题与网络无关,所以我去掉了这样的标签。我也相应地更改了标题。