// client.cpp -- 客户端实现文件.
#include "stdafx.h"
#include <iostream>
#include <WinSock2.h>
#pragma comment (lib, "ws2_32.lib")
const int gc_MaxLengthOfQueue = 10 ;
const unsigned int guc_Port = 7100 ;
//发送的数据类型
struct data
{
unsigned int ID ;
unsigned int Type ;
};
int _tmain(int argc, _TCHAR* argv[])
{
//初始化要发送给服务端的数据.
struct data dataSendToServer = {11, 22};
//创建要从服务端接收的数据
struct data dataReceiveFromServer = {0, 0} ;
//合成套接字版本.
WORD wVersionRequested = MAKEWORD(2, 2) ;
WSADATA wsaData ;
//加载套接字库版本.
if (WSAStartup(wVersionRequested, &wsaData) != 0)
{
return 0 ;
}
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
{
WSACleanup() ;
return 0 ;
}
//创建套接字.
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0) ;
//向服务器发出连接请求.
SOCKADDR_IN addrServer ;
addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1") ;
addrServer.sin_family = AF_INET ;
addrServer.sin_port = htons(guc_Port) ;
connect(sockClient, reinterpret_cast<SOCKADDR *> (&addrServer), sizeof(addrServer)) ;
//接收服务器传来的数据.
recv(sockClient, reinterpret_cast<char *> (&dataReceiveFromServer), sizeof (dataReceiveFromServer), 0) ;
//打印从服务器传来的数据.
std ::cout << "ID: " << dataReceiveFromServer.ID << " Type: " << dataReceiveFromServer.Type << std ::endl ;
//向服务器发送数据.
send(sockClient, reinterpret_cast<char *> (&dataSendToServer), sizeof (dataSendToServer), 0) ;
//关闭套接字.
closesocket(sockClient) ;
WSACleanup() ;
std ::cin.get() ;
return 0;
}
相关文章
- Linux内核TCP/IP协议栈中的设计模式:从面向对象到系统级软件的跨界实践
- TSL 和 SSL 是什么?它们有何关系?-定义:SSL(安全套接层)是一种早期的加密协议,用于在互联网通信中保障数据传输的安全性。它通过加密和身份验证机制,确保客户端(如浏览器)与服务器之间的通信不被窃听或篡改。 版本:SSL 1.0(未发布)、SSL 2.0(1995年,已废弃)、SSL 3.0(1996年,已淘汰)。 问题:SSL 3.0 及早期版本存在严重安全漏洞(如 POODLE 攻击),目前已被现代系统禁用。 2. TLS(Transport Layer Security) 定义:TLS(传输层安全协议)是 SSL 的继任者,旨在提供更安全的通信协议。TLS 由国际互联网工程任务组(IETF)标准化,逐步替代了 SSL。 版本:TLS 1.0(1999年,已淘汰)、TLS 1.1(2006年,已淘汰)、TLS 1.2(2008年,广泛使用)、TLS 1.3(2018年,最新标准)。 优势:更强的加密算法(如 AES、ChaCha20)、更高效的握手过程、支持前向保密(Perfect Forward Secrecy)等。 SSL 与 TLS 的关系 继承关系 TLS 直接基于 SSL 3.0 设计,可以视为 SSL 的升级版。TLS 1.0 最初命名为 SSL 3.1,后因标准化需要更名为 TLS。 协议兼容性
- socket通信获得客户端ip以及port的方法 TCP
- 【网络编程】——基于TCP协议实现回显服务器及客户端
- 基于TCP协议的网络通信
- C语言小项目-基于TCP协议和SOCKET编程的网络通信系统
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- TCP/IP协议及二层转发和三层路由的原理。
- 深入解析TCP/IP协议:网络通信的基石-7. 结论
- RabbitMQ 优点和缺点- 消息可靠性:RabbitMQ 提供了持久化功能和消息确认机制,确保消息在各种情况下都能可靠地存储和处理。 灵活的路由:通过多种交换机类型和绑定规则,RabbitMQ 能够灵活地路由消息到指定的队列。 支持多种消息协议:实现了 AMQP 等(MQTT、STOMP)标准化、开放的消息队列协议,使其能够与多种语言编写的应用程序进行通信。 插件化扩展:RabbitMQ 提供了丰富的插件系统,可以通过插件扩展功能,如死信队列、压缩、追踪等。 高可用性:支持集群模式和镜像队列,确保服务的可用性 易用性和可管理性:提供了丰富的 API 和管理工具,以及多种客户端库和框架支持,易于集成和使用。 多语言支持:RabbitMQ 支持多种编程语言的客户端,包括 Java、Python、Ruby、C#、Node.js 等,方便开发人员集成到各种应用中。 高性能:在处理大量并发消息时表现出色。 广泛的社区支持:拥有庞大的开发者社区和丰富的文档资源。 劣势: 性能和吞吐量较低:相比于 Apache Kafka 等面向大数据流处理的消息队列系统,RabbitMQ 的吞吐量较低,不适合处理海量的实时数据流。RabbitMQ 的设计更注重消息的可靠性和灵活性,而非极高的吞吐性能。