【项目】畅聊

项目名称
畅聊
项目源码
https://github.com/Mmmmmrr/Project.git
项目使用技术
C++STL、http协议、websocket协议、session与cookie、mysql、登录注册、mongoose框架、jsoncpp。
项目简介
使用websocket框架mongoose、http、mongoose、session、mysql、jsoncpp的技术编写的即时通信网页。
项目准备

  • 轮询
    • Ajax短轮询
      客户端周期性的向服务器发起HTTP请求,不管服务器是否真正获得数据,都会向客户端返回响应。
    • Ajax长轮询
      本身不是一个真正的推送。是短轮询的一种变体,在客户端向服务器发起HTTP请求后,服务器并不是每次都立即响应,当服务器得到最新数据时会向客户端传输数据,当数据没有更新时,服务器会保持这个连接,等到数据更新之后,才向客户端传输数据。若长时间没有更新,一段时间后请求就会超时。客户端收到超时信息后,会重新发送一个HTTP请求给服务器。
  • websocket
    WebScoket是一种协议,位于应用层,HTTP是单向通信协议,只有客户端发起HTTP请求,服务器端才会返回数据。WebScoket协议是双向通信协议,在建立连接之后,客户端和服务器都可以主动向对方发送或接受数据。WebScoket协议建立的前提需要借助HTTP协议,建立连接后就与HTTP无关了。
    WebScoket使用了自定义协议,未加密为ws://,加密为wws://。
    WebSock是应用层协议,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的客户端和服务器端的C语言代码示例,可以实现客户端与服务器之间的畅聊: 服务器端代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define PORT 8888 #define MAX_MSG_LEN 1024 int main(int argc, char *argv[]) { // 创建socket int server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); } // 绑定socket和端口 struct sockaddr_in address; address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听端口 if (listen(server_fd, 3) < 0) { perror("listen failed"); exit(EXIT_FAILURE); } printf("Server started listening on port %d...\n", PORT); // 等待客户端连接 int client_fd = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&address); if (client_fd < 0) { perror("accept failed"); exit(EXIT_FAILURE); } printf("Client connected.\n"); // 等待消息 char message[MAX_MSG_LEN]; while (1) { memset(message, 0, MAX_MSG_LEN); int bytes_received = recv(client_fd, message, MAX_MSG_LEN, 0); if (bytes_received < 0) { perror("recv failed"); exit(EXIT_FAILURE); } if (bytes_received == 0) { printf("Client disconnected.\n"); break; } printf("Received message from client: %s\n", message); // 发送消息给客户端 char response[MAX_MSG_LEN]; sprintf(response, "Server received message: %s", message); send(client_fd, response, strlen(response), 0); } // 关闭socket close(server_fd); return 0; } ``` 客户端代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define SERVER_IP "127.0.0.1" #define PORT 8888 #define MAX_MSG_LEN 1024 int main(int argc, char *argv[]) { // 创建socket int client_fd = socket(AF_INET, SOCK_STREAM, 0); if (client_fd < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); } // 连接服务器 struct sockaddr_in server_address; server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = inet_addr(SERVER_IP); server_address.sin_port = htons(PORT); if (connect(client_fd, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) { perror("connection failed"); exit(EXIT_FAILURE); } printf("Connected to server.\n"); // 发送消息给服务器 char message[MAX_MSG_LEN]; while (1) { printf("Enter message to send to server: "); fgets(message, MAX_MSG_LEN, stdin); message[strcspn(message, "\n")] = 0; int bytes_sent = send(client_fd, message, strlen(message), 0); if (bytes_sent < 0) { perror("send failed"); exit(EXIT_FAILURE); } if (strcmp(message, "exit") == 0) { printf("Disconnected from server.\n"); break; } // 接收服务器的响应消息 char response[MAX_MSG_LEN]; int bytes_received = recv(client_fd, response, MAX_MSG_LEN, 0); if (bytes_received < 0) { perror("recv failed"); exit(EXIT_FAILURE); } printf("Received message from server: %s\n", response); } // 关闭socket close(client_fd); return 0; } ``` 运行以上代码后,可以在客户端输入消息并发送给服务器,服务器会将接收到的消息回复给客户端。当客户端输入“exit”时,程序结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值