JQuery GET请求TCP套接字服务器

时间:2014-06-05 22:41:45

标签: jquery c sockets tcp webserver

我在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;
}

1 个答案:

答案 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规范。 (当然,如果您经过快速黑客攻击后,可以忽略客户端发送的任何内容,并始终发送与上述相同的固定响应。)