1
我寫了一個客戶端代碼來創建套接字並向客戶端發送請求,並且由於HTTP 1.1使用Connection:Alive默認情況下仍然連接關閉。如何創建持久連接該服務器監聽,直到連接每個請求是閉上的客戶端代碼:C套接字編程中的持久連接
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(char *msg){
perror(msg);
exit(0);
}
int main(int argc, char *argv[])
{
int sockfd, portno, n,i;
int Max_Requests;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
Max_Requests=atoi(argv[3]);
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname(argv[1]);
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");
i=0;
while(i<Max_Requests){
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
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);
i++;
}
return 0;
}
首先,在'argv'數組中的* first *參數是什麼索引?考慮到'argv [0]'是命令名,並且第一個參數直接跟在... –
1)它是'Connection:Keep-Alive'和2)服務器不需要遵守。你只是聲明你可以支持保持連接,如果它決定使用它。 – spectras
你有什麼*發送*到服務器?請向我們顯示請求,*逐字*。 –