【问题标题】:Read port number from user从用户读取端口号
【发布时间】:2015-09-04 14:35:30
【问题描述】:

我声明我是 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; 

     //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),但我想以这种方式实现它:服务器在使用绑定为套接字分配地址之前向用户询问端口号。用户输入键盘端口号,服务器保存在变量“端口”中,然后将其传递到结构的设置中。

我无法做到刚刚描述的最后一部分:有人可以帮助我吗?

【问题讨论】:

  • 有什么困难? scanf() 的 RTFM
  • 如何阅读用户的输入应该很早就出现在任何书籍或教程中。你以前没做过吗?
  • 闻起来像作业......
  • 您真正的问题与网络无关,因此我删除了此类标签。我也相应地更改了标题。

标签: c input


【解决方案1】:

使用scanf 读取用户输入

int var;
scanf("%d", &var);

现在var 包含用户输入的整数。

您会注意到格式说明符与printf(http://www.cplusplus.com/reference/cstdio/printf/) 非常相似。

scanf 返回它成功读取的值的数量。因此,为了确保用户输入数字,请检查 scanf 是否返回 1。

scanf 的一个问题是它会在stdin 中留下一个尾随换行符。所以,你需要刷新它:

void flush()
{
    int c;
    while ((c = getchar()) != '\n')
        ;
}

这会消耗所有字符,直到看到换行符。不过不要使用fflush(stdin) 刷新。

了解 K&R 中的 scanf(第 128 页,第 7.4 节):http://www.iups.org/media/meeting_minutes/C.pdf

完整的 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 2014-08-03
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多