当前位置: 技术问答>linux和unix
TCP/IP程序中 字符串的问题
来源: 互联网 发布时间:2015-10-08
本文导语: 本人正在做一个TCP/IP程序,程序向服务器发出HTTP请求,取得返回内容,目的是测试自己的网站。由终端输入字符串,发送到服务器,之后服务器可返回请求文件的内容。下面一段程序是可以正常运行的,但是对要发...
本人正在做一个TCP/IP程序,程序向服务器发出HTTP请求,取得返回内容,目的是测试自己的网站。由终端输入字符串,发送到服务器,之后服务器可返回请求文件的内容。下面一段程序是可以正常运行的,但是对要发送的字符串进行初始化定义,直接发送则不可以,服务器未返回内容。
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);
}
}
主程序中建立连接后 str_cli(stdin,sockfd);
程序操作: 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.
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);
}
}
主程序中建立连接后 str_cli(stdin,sockfd);
程序操作: 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.
|
那肯定不行啦
字符串后+ rnrn
字符串后+ rnrn
|
估计你前面传给fp的stdin,所以在fgets(sends,MAXSIZE,fp)这里就是要你在command line输入字符发给服务器,所以等待下一步输入很正常啊,输入结束用Ctrl+D
|
是你没明白HTTP协议,写出的程序当然不对
|
HTTP协议的要求是每一个请求要以"rn"结尾才行……
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。