程序:
//Server
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<netdb.h>
void main()
{
int fd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in sa,clientaddr;
struct in_addr ip;
if(inet_pton(AF_INET,"127.0.0.1",&ip)!=1){
perror("inet_pton");
exit(1);
}
sa.sin_family=AF_INET;
sa.sin_port=htons(5000);
sa.sin_addr=ip;
if(bind(fd,(struct sockaddr*)&sa,sizeof(sa))!=0){
printf("Unable to Bind\n");
perror("");
exit(1);
}
if(listen(fd,1024)!=0){
printf("Unable to Listen \n");
exit(1);
}
int len=sizeof(struct sockaddr);
int des;
if((des=accept(fd,(struct sockaddr*)&clientaddr,&len))<0){
printf("Unable to accept\n");
}
else{
printf("Connection accepted....\n");
char buf[1024];
int r=recv(des,buf,1024,0);
printf("Recived Data: ");
fflush(stdout);
write(1,buf,r);
printf("\n");
buf[0]='\0';
}
}
上述程序是简单的服务器程序,它接受客户端连接并接受客户端发送的数据。我试验一下 使用telnet,如下所示。
服务器:
$ ./a.out
Connection accepted....
Recived Data: ...Hai...
$
客户端:
$ telnet localhost 5000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
...Hai...
Connection closed by foreign host.
$
使用telnet时,它已正常工作。但我的要求是不用连接telnet,我必须连接浏览器。我查一下 使用浏览器作为我的客户端,如“127.0.0.1:5000”。我希望建立任何联系。但是没有响应和服务器进程 没有得到任何要求。这背后的问题是什么?为什么服务器没有得到请求?
与telnet类似,浏览器也获取ip和端口号并建立TCP连接。但它不起作用。任何人都可以解释为什么会这样 这个 ?
答案 0 :(得分:0)
Telnet将输出您发回的任何内容,但浏览器在呈现之前需要完整的HTTP / 1.1响应。 这将是这样的(\ r \ n是棘手的):
header = "HTTP/1.1 200 OK\r\n"
+ "Content-Type: text/html;charset=UTF-8\r\n"
+ "\r\n";
随后是您希望浏览器呈现的内容。
这解决了部分问题,我不知道为什么你无法在服务器端看到浏览器请求(原因是&#34; GET / HTTP / 1.1&#34;或者其他什么像那样),我会尝试更改服务器,不要在单个请求后退出(放入while(1)循环,看看会发生什么)。
while(1){
if((des=accept(fd,(struct sockaddr*)&clientaddr,&len))<0){
printf("Unable to accept\n");
}
else{
printf("Connection accepted....\n");
char buf[1024];
int r=recv(des,buf,1024,0);
printf("Recived Data: ");
fflush(stdout);
write(1,buf,r);
printf("\n");
buf[0]='\0';
}
close(des);
}