|
|
本人正在做一个TCP/IP程序,程序向服务器发出HTTP请求,取得返回内容,目的是测试自己的网站。由终端输入字符串,发送到服务器,之后服务器可返回请求文件的内容。下面一段程序是可以正常运行的,但是对要发送的字符串进行初始化定义,直接发送则不可以,服务器未返回内容。
下面是由终端进行输入的程序:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define MAXSIZE 2000
void str_cli(FILE *fp, int sockfd) /*由终端输入字符串,发送到服务器*/
{
char sends[MAXSIZE], recvs[MAXSIZE];
int n=0;
while ( fgets(sends,MAXSIZE,fp)!= NULL)
{
send(sockfd,sends,strlen(sends),0);
printf("\nsends --->%s",sends);
if ( (n=recv(sockfd,recvs,MAXSIZE,0)) == 0 )
{
printf("\nerror receiving data");
exit(1);
}
recvs[n]=0;
fputs(recvs,stdout);
}
}
int main(int argc, char *argv[])
{
int sockfd;
char buffer[1024];
struct sockaddr_in server_addr;
struct hostent *host;
int portnumber,nbytes;
if(argc!=3)
{
printf("Usage%s hostname portnumber\a\n",argv[0]);
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
printf("Gethostname error\n");
exit(1);
}
if((portnumber=atoi(argv[2]))<0)
{
printf("Usage%s hostname portnumber\a\n",argv[0]);
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("Socket Error%s\a\n",strerror(errno));
exit(1);
}
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnumber);
server_addr.sin_addr=*((struct in_addr *)host->h_addr);
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
printf("Connect Error%s\a\n",strerror(errno));
exit(1);
}
/*已建立连接*/
str_cli(stdin,sockfd); /*处理操作*/
close(sockfd);
exit(0);
}
文件名myclient
程序操作: myclient localhost 80
建立连接后输入 GET /index.html
程序返回index.html文件内容。
之后把str_cli中的字符串进行初始化,发送给服务器。
void str_cli(FILE *fp, int sockfd) /*由终端输入字符串,发送到服务器*/
{
char sends[MAXSIZE], recvs[MAXSIZE];
char pp[MAXSIZE]="GET /index.html";
int n=0;
while ( fgets(sends,MAXSIZE,fp)!= NULL)
{
send(sockfd,pp,strlen(pp),0);
printf("\nsends --->%s",sends);
if ( (n=recv(sockfd,recvs,MAXSIZE,0)) == 0 )
{
printf("\nerror receiving data");
exit(1);
}
recvs[n]=0;
fputs(recvs,stdout);
}
}
结果程序的反应是未出现页面结果,而是等待下一步的输入。
如果采用strcpy(sends,pp) 把sends拷贝到pp中,则程序运行正确。
那么由终端输入的字符串与自己编写的字符串是否有某些区别,为什么会有这样的结果。
还请指教,THANKS. |
|