Possible Duplicate:
Checking value of argc
我要坚持使用套接字编程,这是我在linux-ubuntu上开发的套接字编程简单C代码,但是如果由于代表端口的argc值而导致条件无效,则该代码将无法工作并在第一个退出。
我需要帮助:)
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
const char APRESSMESSAGE[] = "APRESS - For Professionals, By Professionals!\n";
int main(int argc, char *argv[]) {
int simpleSocket = 0;
int simplePort = 0;
int returnStatus = 0;
struct sockaddr_in simpleServer;
if (2 != argc) {
fprintf(stderr, "Usage: %s <port>\n", argv[0]);
exit(1);
}
simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
printf("%i\n", simpleSocket);
if (simpleSocket <= -1) {
fprintf(stderr, "Could not create a socket!\n");
exit(1);
} else {
fprintf(stderr, "Socket created!\n");
}
/* retrieve the port number for listening */
simplePort = atoi(argv[1]);
/* set up the address structure */
/* use INADDR_ANY to bind to all local addresses
*/
puts("test1");
bzero(&simpleServer, sizeof(simpleServer));
simpleServer.sin_family = AF_INET;
simpleServer.sin_addr.s_addr = htonl(INADDR_ANY);
simpleServer.sin_port = htons(simplePort);
/*
bind to the address and port with our socket
*/
returnStatus = bind(simpleSocket, (struct sockaddr *) &simpleServer,
sizeof(simpleServer));
if (returnStatus == 0) {
fprintf(stderr, "Bind completed!\n");
} else {
fprintf(stderr, "Could not bind to address!\n");
close(simpleSocket);
exit(1);
}
/* let's listen on the socket for connections */
returnStatus = listen(simpleSocket, 5);
if (returnStatus == -1) {
fprintf(stderr, "Cannot listen on socket!\n");
close(simpleSocket);
exit(1);
}
while (1) {
struct sockaddr_in clientName = { 0 };
int simpleChildSocket = 0;
int clientNameLength = sizeof(clientName);
/* wait here */
simpleChildSocket = accept(simpleSocket,
(struct sockaddr *) &clientName, &clientNameLength);
if (simpleChildSocket == -1) {
fprintf(stderr, "Cannot accept connections!\n");
close(simpleSocket);
exit(1);
}
/* handle the new connection request
*/
/* write out our message to the client */
write(simpleChildSocket, APRESSMESSAGE, strlen(APRESSMESSAGE));
close(simpleChildSocket);
}
close(simpleSocket);
return 0;
}
最佳答案
我不确定您要问的是什么,但是我相信您对if
语句如何检查传递给程序的参数数量感到困惑。从命令行,如果用户运行:
myprogram
argv
的值将为{"myprogram"}
,argc
的值为1。另一方面,如果运行:myprogram 23
argv
的值将为{"myprogram", "23"}
,argc
的值为2。我认为您在运行程序时根本没有为端口号传递适当的参数。关于c - 检查C中argc的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12904559/