Server.cpp
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
const int PORT = 8888;
const int BUFFER_SIZE = 1024;
int main() {
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
std::cerr << "WSAStartup failed: " << iResult << std::endl;
return 1;
}
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET) {
std::cerr << "socket failed: " << WSAGetLastError() << std::endl;
WSACleanup();
return 1;
}
sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = INADDR_ANY;
serverAddress.sin_port = htons(PORT);
if (bind(serverSocket, reinterpret_cast<sockaddr*>(&serverAddress), sizeof(serverAddress)) == SOCKET_ERROR) {
std::cerr << "bind failed: " << WSAGetLastError() << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
if (listen(serverSocket, SOMAXCONN) == SOCKET_ERROR) {
std::cerr << "listen failed: " << WSAGetLastError() << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
std::cout << "Server listening on port " << PORT << std::endl;
sockaddr_in clientAddress;
int clientAddressSize = sizeof(clientAddress);
SOCKET clientSocket = accept(serverSocket, reinterpret_cast<sockaddr*>(&clientAddress), &clientAddressSize);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "accept failed: " << WSAGetLastError() << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
char buffer[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = recv(clientSocket, buffer, BUFFER_SIZE, 0)) > 0) {
buffer[bytesRead] = '\0';
std::cout << "Received from client: " << buffer << std::endl;
send(clientSocket, buffer, bytesRead, 0);
}
if (bytesRead == SOCKET_ERROR) {
std::cerr << "recv failed: " << WSAGetLastError() << std::endl;
}
closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup();
system("pause");
return 0;
}
Client.cpp
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
const int PORT = 8888;
const int BUFFER_SIZE = 1024;
int main() {
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
std::cerr << "WSAStartup failed: " << iResult << std::endl;
return 1;
}
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "socket creation failed: " << WSAGetLastError() << std::endl;
WSACleanup();
return 1;
}
sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(PORT);
inet_pton(AF_INET, "127.0.0.1", &serverAddress.sin_addr.s_addr);
if (connect(clientSocket, reinterpret_cast<sockaddr*>(&serverAddress), sizeof(serverAddress)) == SOCKET_ERROR) {
std::cerr << "connect failed: " << WSAGetLastError() << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
std::cout << "Connected to server." << std::endl;
char message[] = "Hello from client!";
send(clientSocket, message, strlen(message), 0);
char buffer[BUFFER_SIZE];
int bytesRead = recv(clientSocket, buffer, BUFFER_SIZE, 0);
if (bytesRead > 0) {
buffer[bytesRead] = '\0';
std::cout << "Received from server: " << buffer << std::endl;
}
else {
std::cerr << "recv failed: " << WSAGetLastError() << std::endl;
}
closesocket(clientSocket);
WSACleanup();
system("pause");
return 0;
}
使用环境
大家可在vs中在同一解决方案下建立两个项目,先运行Server.cpp再运行Client.cpp即可。
有问题留言!
标签:std,协议,const,iResult,int,C++,cerr,tcp,include From: https://blog.csdn.net/2301_80165072/article/details/142619455