我在C中编写了一个非常简单的TCP服务器,它使用套接字。我想使用JQuery get和post操作从服务器到Web界面来回建立。
在这个阶段,我实现的唯一功能是GET操作,服务器在连接时侦听并返回一个字符串。但是,这不适用于JQuery(或JS)。奇怪的是当我直接将服务器IP和端口输入浏览器地址栏时,会显示字符串吗?
我在本地主机上使用box标准JQuery。
有什么建议吗?
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$.get("127.0.0.1:800",function(data){
alert("Data: " + data );
});
});
});
</script>
</head>
<body>
<button>GET</button>
</body>
</html>
服务器
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int sockd, sockd2;
int addrlen;
struct sockaddr_in my_name, peer_name;
int status;
/* create a socket */
sockd = socket(AF_INET, SOCK_STREAM, 0);
if (sockd == -1)
{
perror("Socket creation error");
exit(1);
}
if (argc < 2)
{
fprintf(stderr, "Usage: %s port_number\n", argv[0]);
exit(1);
}
/* server address */
my_name.sin_family = AF_INET;
my_name.sin_addr.s_addr = INADDR_ANY;
my_name.sin_port = htons(atoi(argv[1]));
status = bind(sockd, (struct sockaddr*)&my_name, sizeof(my_name));
if (status == -1)
{
perror("Binding error");
exit(1);
}
status = listen(sockd, 5);
if (status == -1)
{
perror("Listening error");
exit(1);
}
for(;;)
{
/* wait for a connection */
addrlen = sizeof(peer_name);
sockd2 = accept(sockd, (struct sockaddr*)&peer_name, &addrlen);
if (sockd2 == -1)
{
perror("Wrong connection");
exit(1);
}
write(sockd2, "Hello!\n", 7);
close(sockd2);
}
return 0;
}
答案 0 :(得分:0)
JQuery希望您的服务器是HTTP服务器,但您不会说HTTP。您的浏览器不应该能够显示您的消息。
在HTTP中,客户端发送请求,然后服务器发送响应。然后可以立即关闭连接(最简单)或重用以用于将来的请求(因为它比建立新连接更快)。
最小的HTTP请求(客户端发送的内容)如下所示:
GET / HTTP/1.1
Host: 127.0.0.1
和响应(服务器发送的内容)如下所示:
HTTP/1.1 200 OK
Connection: close
Content-Length: 6
Content-Type: text/plain
Hello!
发送响应后服务器将关闭连接。它必须优雅地关闭连接&#34;只有shutdown
的{{1}} - 不,因为这可能会阻止客户看到整个回复。
请注意,每行末尾都有一个close
,而不只是\r\n
。
如果要编写正确的Web服务器,至少应该阅读RFC 2616这是HTTP / 1.1规范。 (当然,如果您经过快速黑客攻击后,可以忽略客户端发送的任何内容,并始终发送与上述相同的固定响应。)