参考1
客户端
#include<iostream>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void initialization();
int main() {
int send_len = 0;
int recv_len = 0;
char send_buf[100];
char recv_buf[100];
SOCKET s_server;
SOCKADDR_IN server_addr;
initialization();
server_addr.sin_family = AF_INET;
server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(1234);
s_server = socket(AF_INET, SOCK_STREAM, 0);
if (connect(s_server, (SOCKADDR*)& server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {
cout << "服务器连接失败!" << endl;
WSACleanup();
}
else {
cout << "服务器连接成功!" << endl;
}
while (1) {
cout << "请输入发送信息:";
cin >> send_buf;
send_len = send(s_server, send_buf, 100, 0);
if (send_len < 0) {
cout << "发送失败!" << endl;
break;
}
recv_len = recv(s_server, recv_buf, 100, 0);
if (recv_len < 0) {
cout << "接受失败!" << endl;
break;
}
else {
cout << "服务端信息:" << recv_buf << endl;
}
}
closesocket(s_server);
WSACleanup();
return 0;
}
void initialization() {
WORD w_req = MAKEWORD(2, 2);
WSADATA wsadata;
int err;
err = WSAStartup(w_req, &wsadata);
if (err != 0) {
cout << "初始化套接字库失败!" << endl;
}
else {
cout << "初始化套接字库成功!" << endl;
}
if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2)
{
cout << "套接字库版本号不符!" << endl;
WSACleanup();
}
else {
cout << "套接字库版本正确!" << endl;
}
}
服务端
#include<iostream>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void initialization();
int main() {
int send_len = 0;
int recv_len = 0;
int len = 0;
char send_buf[100];
char recv_buf[100];
SOCKET s_server;
SOCKET s_accept;
SOCKADDR_IN server_addr;
SOCKADDR_IN accept_addr;
initialization();
server_addr.sin_family = AF_INET;
server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(1234);
s_server = socket(AF_INET, SOCK_STREAM, 0);
if (bind(s_server, (SOCKADDR*)& server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {
cout << "套接字绑定失败!" << endl;
WSACleanup();
}
else {
cout << "套接字绑定成功!" << endl;
}
if (listen(s_server, SOMAXCONN) < 0) {
cout << "设置监听状态失败!" << endl;
WSACleanup();
}
else {
cout << "设置监听状态成功!" << endl;
}
cout << "服务端正在监听连接,请稍候...." << endl;
len = sizeof(SOCKADDR);
s_accept = accept(s_server, (SOCKADDR*)& accept_addr, &len);
if (s_accept == SOCKET_ERROR) {
cout << "连接失败!" << endl;
WSACleanup();
return 0;
}
cout << "连接建立,准备接受数据" << endl;
while (1) {
recv_len = recv(s_accept, recv_buf, 100, 0);
if (recv_len < 0) {
cout << "接受失败!" << endl;
break;
}
else {
cout << "客户端信息:" << recv_buf << endl;
}
cout << "请输入回复信息:";
cin >> send_buf;
send_len = send(s_accept, send_buf, 100, 0);
if (send_len < 0) {
cout << "发送失败!" << endl;
break;
}
}
closesocket(s_server);
closesocket(s_accept);
WSACleanup();
return 0;
}
void initialization() {
WORD w_req = MAKEWORD(2, 2);
WSADATA wsadata;
int err;
err = WSAStartup(w_req, &wsadata);
if (err != 0) {
cout << "初始化套接字库失败!" << endl;
}
else {
cout << "初始化套接字库成功!" << endl;
}
if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {
cout << "套接字库版本号不符!" << endl;
WSACleanup();
}
else {
cout << "套接字库版本正确!" << endl;
}
}
参考2
Client:
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8080
int main()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
return 0;
}
SOCKET socket = ::socket(AF_INET, SOCK_STREAM, 0);
if (socket == INVALID_SOCKET)
{
return 0;
}
SOCKADDR_IN serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &serverAddress.sin_addr.s_addr);
if (connect(socket, (SOCKADDR*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR)
{
closesocket(socket);
WSACleanup();
return 0;
}
std::string data = "机器切割状态为:";
if (send(socket, data.c_str(), data.size(), 0) == SOCKET_ERROR)
{
closesocket(socket);
WSACleanup();
return 0;
}
Sleep(100);
closesocket(socket);
WSACleanup();
return 0;
}
Server:
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8080
int main()
{
WSADATA wsa;
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
std::cerr << "WSAStartup failed.\n";
return 1;
}
SOCKET server_fd = ::socket(AF_INET, SOCK_STREAM, 0);
if (server_fd == INVALID_SOCKET)
{
perror("socket failed");
exit(EXIT_FAILURE);
}
sockaddr_in address;
memset(&address, 0, sizeof(address));
int addrlen = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htons(PORT);
address.sin_addr.s_addr = INADDR_ANY;
if (bind(server_fd, (LPSOCKADDR)&address, sizeof(address)) == SOCKET_ERROR)
{
perror("bind failed");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 3) < 0)
{
perror("Fiald to listen socket");
exit(EXIT_FAILURE);
}
std::cout << "server is listening" << std::endl;
int new_socket;
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
if ((new_socket = accept(server_fd, (SOCKADDR*)&client_addr, &client_addr_len)) == -1)
{
std::cerr << "Fiald to accept socket" << std::endl;
exit(EXIT_FAILURE);
}
std::cout << "a client connected" << std::endl;
char buffer[1024] = { 0 };
recv(new_socket, buffer, 1024, 0);
std::cout << "Message from client: " << buffer << std::endl;
const char* hello = "hello from server";
send(new_socket, hello, strlen(hello), 0);
std::cout << "Hello message sent\n";
closesocket(new_socket);
closesocket(server_fd);
WSACleanup();
return 0;
}