我说我是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),但我想以这种方式实现它:服务器在使用bind为套接字分配地址之前向用户询问端口号。用户输入端口键盘的数量,服务器保存在变量"端口"然后将其传递到结构的设置中。
我不能做到刚刚描述的最后一部分:有人可以帮助我吗?
答案 0 :(得分:0)
使用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;
}