C++ 实现 TCP 协议
使用 C++ 实现 TCP 协议需要使此陆槐用 Windows 套接字 API。以下是一个简单的 C++ 示例代码,使用套接字 API 创建 TCP 客户端程序:
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData
SOCKET ConnectSocket = INVALID_SOCKET
struct addrinfo *result = NULL, *ptr = NULL, hints
int iResult
// 初始化 Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData)
if (iResult != 0) {
std::cout <<"WSAStartup failed: " <<iResult <<std::endl
return 1
}
ZeroMemory(&hints, sizeof(hints))
hints.ai_family = AF_UNSPEC
hints.ai_socktype = SOCK_STREAM
hints.ai_protocol = IPPROTO_TCP
// 解析悉念服务器地址和端口
iResult = getaddrinfo("www.example.com", "80", &hints, &result)
if (iResult != 0) {
std::cout <森友<"getaddrinfo failed: " <<iResult <<std::endl
WSACleanup()
return 1
}
// 创建套接字并连接服务器
for (ptr = resultptr != NULLptr = ptr->ai_next) {
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol)
if (ConnectSocket == INVALID_SOCKET) {
std::cout <<"socket failed: " <<WSAGetLastError() <<std::endl
WSACleanup()
return 1
}
iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen)
if (iResult == SOCKET_ERROR) {
closesocket(ConnectSocket)
ConnectSocket = INVALID_SOCKET
continue
}
break
}
freeaddrinfo(result)
if (ConnectSocket == INVALID_SOCKET) {
std::cout <<"Unable to connect to server" <<std::endl
WSACleanup()
return 1
}
// 发送和接收数据
iResult = send(ConnectSocket, "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n", strlen("GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n"), 0)
if (iResult == SOCKET_ERROR) {
std::cout <<"send failed: " <<WSAGetLastError() <<std::endl
closesocket(ConnectSocket)
WSACleanup()
return 1
}
char recvbuf[512]
do {
iResult = recv(ConnectSocket, recvbuf, sizeof(recvbuf), 0)
if (iResult >0) {
std::cout.write(recvbuf, iResult)
}
else if (iResult == 0) {
std::cout <<"Connection closed" <<std::endl
}
else {
std::cout <<"recv failed: " <<WSAGetLastError() <<std::endl
}
} while (iResult >0)
// 关闭套接字和清理 Winsock
closesocket(
众所周知TCP(Transmission Control Protocol )是一种面向连接的、可靠的、基于字节流的通信协议。而开发TCP socket应用程序是一件比较简单的事情。下面就用一个比较简单的demo 讲解开发的过程。该程序分为客户端和服务器端,客户端主要是向服务器端发送数据,服务器端主要是对于接收的数据进行显示。
TCP服务器端和客户端的主要流程:唯知
服务器端:1 创建套接字 2 绑定 3 监听 4 接受连接灶山迅 5 收发数据 6 关闭
客户端: 1 创建套接字 2 连接 3 收发数据 4 关闭
实现中用到的主要函数及
服务器: 1 WSAStartup() 2 socket() 3 bind() 4 listen() 5 accept() 6 recv() 7 closesocket() 8 WSACleanup()
客户端: 1 WSAStartup() 2 socket() 3 connect() 4 send() 5 closesocket() 6 WSACleanup()
下面是server 和 client 的实现代码,运行的时候首先启动server,然后再启动client, 则隐此在server部分打印出“hello world” 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)