您的位置:首页 > 新闻 > 会展 > 工业设计网站下载_企业网站优化怎么做_深圳疫情防控最新消息_线上平台推广方式

工业设计网站下载_企业网站优化怎么做_深圳疫情防控最新消息_线上平台推广方式

2025/3/7 2:11:25 来源:https://blog.csdn.net/CPJ_phone/article/details/146050336  浏览:    关键词:工业设计网站下载_企业网站优化怎么做_深圳疫情防控最新消息_线上平台推广方式
工业设计网站下载_企业网站优化怎么做_深圳疫情防控最新消息_线上平台推广方式

1. TCP 通信

TCP(Transmission Control Protocol):
特点:
面向连接,可靠传输。
保证数据顺序和完整性。
适用于需要可靠传输的场景(如文件传输、网页浏览)。

C 语言案例:
服务器端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int server_fd, new_socket;struct sockaddr_in address;int addrlen = sizeof(address);char buffer[BUFFER_SIZE] = {0};char *response = "Hello from server";// 创建 socketif ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("Socket failed");exit(EXIT_FAILURE);}address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定 socketif (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);}// 接受连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {perror("Accept failed");exit(EXIT_FAILURE);}// 读取数据read(new_socket, buffer, BUFFER_SIZE);printf("Client: %s\n", buffer);// 发送响应send(new_socket, response, strlen(response), 0);printf("Response sent\n");close(new_socket);close(server_fd);return 0;
}

客户端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int sock = 0;struct sockaddr_in serv_addr;char *message = "Hello from client";char buffer[BUFFER_SIZE] = {0};// 创建 socketif ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {perror("Socket creation error");return -1;}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);// 将 IP 地址从字符串转换为二进制if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {perror("Invalid address/ Address not supported");return -1;}// 连接服务器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {perror("Connection Failed");return -1;}// 发送数据send(sock, message, strlen(message), 0);printf("Message sent\n");// 接收响应read(sock, buffer, BUFFER_SIZE);printf("Server: %s\n", buffer);close(sock);return 0;
}

2.UDP(User Datagram Protocol)

特点:
无连接,不可靠传输。
数据包可能丢失或乱序。
适用于实时性要求高的场景(如视频流、在线游戏)。
C 语言案例:
服务器端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int sockfd;char buffer[BUFFER_SIZE];struct sockaddr_in servaddr, cliaddr;// 创建 socketif ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}memset(&servaddr, 0, sizeof(servaddr));memset(&cliaddr, 0, sizeof(cliaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = INADDR_ANY;servaddr.sin_port = htons(PORT);// 绑定 socketif (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {perror("Bind failed");exit(EXIT_FAILURE);}int len, n;len = sizeof(cliaddr);// 接收数据n = recvfrom(sockfd, (char *)buffer, BUFFER_SIZE, MSG_WAITALL, (struct sockaddr *)&cliaddr, &len);buffer[n] = '\0';printf("Client: %s\n", buffer);// 发送响应sendto(sockfd, "Hello from server", strlen("Hello from server"), MSG_CONFIRM, (const struct sockaddr *)&cliaddr, len);printf("Response sent\n");close(sockfd);return 0;
}

客户端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int sockfd;char buffer[BUFFER_SIZE];struct sockaddr_in servaddr;// 创建 socketif ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(PORT);servaddr.sin_addr.s_addr = INADDR_ANY;// 发送数据sendto(sockfd, "Hello from client", strlen("Hello from client"), MSG_CONFIRM, (const struct sockaddr *)&servaddr, sizeof(servaddr));printf("Message sent\n");// 接收响应int len, n;len = sizeof(servaddr);n = recvfrom(sockfd, (char *)buffer, BUFFER_SIZE, MSG_WAITALL, (struct sockaddr *)&servaddr, &len);buffer[n] = '\0';printf("Server: %s\n", buffer);close(sockfd);return 0;
}

3.WebSocket 通信

特点:
全双工通信协议,基于 TCP。
适用于实时通信场景(如聊天应用、实时数据推送)。
C 语言案例:
WebSocket 通常使用库(如 libwebsockets)实现,以下是一个简单示例:

#include <libwebsockets.h>
#include <stdio.h>
#include <string.h>static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) {return 0;
}static int callback_websocket(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) {switch (reason) {case LWS_CALLBACK_ESTABLISHED:printf("Connection established\n");break;case LWS_CALLBACK_RECEIVE:printf("Received data: %s\n", (char *)in);lws_write(wsi, in, len, LWS_WRITE_TEXT);break;default:break;}return 0;
}static struct lws_protocols protocols[] = {{ "http-only", callback_http, 0, 0 },{ "websocket", callback_websocket, 0, 0 },{ NULL, NULL, 0, 0 }
};int main() {struct lws_context_creation_info info;struct lws_context *context;memset(&info, 0, sizeof info);info.port = 8080;info.protocols = protocols;context = lws_create_context(&info);if (!context) {fprintf(stderr, "WebSocket context creation failed\n");return -1;}while (1) {lws_service(context, 1000);}lws_context_destroy(context);return 0;
}

(easywsclient库)

#include "easywsclient.hpp"
using namespace cv;using easywsclient::WebSocket;
static WebSocket::pointer ws = NULL;
void handle_message(const std::string & message)
{printf(">>> %s\n", message.c_str());if (message == "world") { ws->close(); }
}int main()
{
#ifdef _WIN32INT rc;WSADATA wsaData;rc = WSAStartup(MAKEWORD(2, 2), &wsaData);if (rc) {printf("WSAStartup Failed.\n");return 1;}
#endifcJSON* cjson_test = NULL;char* str = NULL;/* 创建一个JSON数据对象(链表头结点) */cjson_test = cJSON_CreateObject();/* 添加一条字符串类型的JSON数据(添加一个链表节点) */cJSON_AddStringToObject(cjson_test, "id", "0");/* 添加一条整数类型的JSON数据(添加一个链表节点) */
//    cJSON_AddNumberToObject(cjson_test, "id", "0");/* 添加一条字符串类型的JSON数据(添加一个链表节点) */cJSON_AddStringToObject(cjson_test, "image", "abc");/* 打印JSON对象(整条链表)的所有数据 */str = cJSON_Print(cjson_test);printf("JSON String:\n%s\n", str);ws = WebSocket::from_url("ws://47.100.124.211:8000/ws/ObjectDetection/");assert(ws); 判断ws对象是否为空null ,当没有连接上的时候这个对象是NULL//ws->send("hello");ws->send(str);while (ws->getReadyState() != WebSocket::CLOSED) {ws->poll();//这个函数一定要在循环里调用,发送和接收都是基于这个函数进行异步处理的ws->dispatch(handle_message);}delete ws;
#ifdef _WIN32WSACleanup();
#endifreturn 0;
}

4.组播(Multicast)通信

特点:
一对多通信,数据包发送到组播组,组内所有成员都能接收。
适用于视频直播、在线会议等场景。
C 语言案例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define MULTICAST_GROUP "239.0.0.1"
#define PORT 12345int main() {int sockfd;struct sockaddr_in addr;char *message = "Hello, multicast!";// 创建 socketif ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr(MULTICAST_GROUP);addr.sin_port = htons(PORT);// 发送组播数据if (sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&addr, sizeof(addr)) < 0) {perror("Sendto failed");exit(EXIT_FAILURE);}printf("Multicast message sent\n");close(sockfd);return 0;
}

5.单播(Unicast)通信

特点:
一对一通信,数据包从发送方直接传输到接收方。
适用于大多数网络通信场景。
C 语言案例:
单播通常使用 TCP 或 UDP 实现,参考前面的 TCP/UDP 示例。

总结
TCP/UDP:分别用于可靠传输和实时传输。
WebSocket:适用于全双工实时通信。
组播:一对多通信,适合大规模数据传输。
单播:一对一通信,适用于大多数场景。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com