2012-11-25 181 views
-3

我想在linux上修改這個c程序。Linux C定義緩衝區

此時此程序要求用戶輸入,然後將該輸入發送到服務器。
現在,我不想那樣。我希望服務器的輸入來自file.txt。

如果文件每行包含一個字,並且文件中的每一行都將作爲緩衝區發送到服務器。

例names.txt中:

john 
jane 
doe 

實施例緩衝器:

GET /cast/api.php?name=john 
GET /cast/api.php?name=jane 
GET /cast/api.php?name=doe 

每個名稱將被髮送到服務器,當客戶端到達文件的結尾,並已發送的所有的那些數據到服務器然後它會結束。

問題是我有點不知所措,它是我第一次用C編寫Linux代碼。

現在我只是想編碼如何設置緩衝區而不是用戶輸入。
一旦我能夠做到這一點。然後,我會嘗試編碼以從文件中獲取緩衝區。

這是我的代碼:

int sockfd, portno, n; 
struct sockaddr_in serv_addr; 
struct hostent *server; 

char buffer[256]; 
char buffer2[256]; 

portno = 80; 
sockfd = socket(AF_INET, SOCK_STREAM, 0); 
if (sockfd < 0) 
    error("ERROR opening socket"); 
server = gethostbyname("api.domain.com"); 
if (server == NULL) { 
    fprintf(stderr,"ERROR, no such host\n"); 
    exit(0); 
} 
bzero((char *) &serv_addr, sizeof(serv_addr)); 
serv_addr.sin_family = AF_INET; 
bcopy((char *)server->h_addr, 
    (char *)&serv_addr.sin_addr.s_addr, 
    server->h_length); 
serv_addr.sin_port = htons(portno); 
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
    error("ERROR connecting"); 

printf("1"); 

printf("Please enter the message: "); 

//this gives me 'err: incompatible types in assignment' 
buffer = "somename"; 

printf("2"); 

bzero(buffer,256); 
//fgets(buffer,255,stdin); 
sprintf(buffer2, "GET /cast/api.php?name=%s", buffer); 
n = write(sockfd,buffer2,strlen(buffer2)); 
if (n < 0) 
    error("ERROR writing to socket"); 
bzero(buffer,256); 
n = read(sockfd,buffer,255); 
if (n < 0) 
    error("ERROR reading from socket"); 
printf("%s\n",buffer); 
close(sockfd); 
return 0; 
+5

const char * buffer =「我的硬編碼緩衝區」; ? – simonc

回答

1

您可以使用sprintf寫信給你的緩衝區。 例如

char buffer[256]; 
bzero(buffer,256); 
sprintf(buffer, "What you want to print to the buffer, can do with arguments %d %d %d",arg1,arg2,arg3); 

編輯我所能發現是錯的,應該如何

bzero(buffer,256); //not really needed as we use sprintf, but use to be sure 
sprintf(buffer,"%s","something"); 

//fgets(buffer,255,stdin); 
sprintf(buffer2, "GET /cast/api.php?name=%s", buffer); 
+0

我想這樣,但是當我更改我的代碼時,它只是掛起......沒有任何反應。 – user1553142

+0

名稱[256]中是否有\ 0字符?否則它會一直持續到找到它。 –

+0

如何知道?抱歉。我第一個Linux客戶端應用程序:)我發佈了完整的代碼。我只是想刪除選項來發送消息。 – user1553142

0

如果你會得到從標準輸入數據,則只能使用2種方式做到這一點:

1使用靜態緩衝器

char buf[256]; 
fgets(buf,255,stdin); 

2)動態緩衝器

0123)
char *buf = malloc(256 * sizeof(char)); 
fgets(buf,255,stdin); 
free(buf); // space is nt allocating any more