我以一种商店对外提供服务的模式,来写出这个Demo。
服务:dmServer.cpp
#include <iostream>
#include <winsock2.h>
using namespace std;
int main(int argc, char *argv[])
{
WSADATA wsd;
WSAStartup(MAKEWORD(2, 2), &wsd);
// 申请店面,负责对外的接头
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 店面地址
string host = "127.0.0.1";
int port = 8001;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(host.c_str());
addr.sin_port = htons(port);
// 注册本店
bind(sock, (struct sockaddr *)(&addr), sizeof(addr));
// 最大服务数量
listen(sock, 5);
// 等待客人中,交给小弟处理
int workSock = accept(sock, NULL, NULL);
// 小弟干活
char buf[1000] = {0};
memset( buf, 0, sizeof(buf));
int length = recv(workSock, buf, sizeof(buf), 0);
cout << buf << endl;
// 结束服务
closesocket(workSock);
closesocket(sock);
WSACleanup();
return 0;
}
客户:dmClient.cpp
#include <iostream>
#include <winsock2.h>
using namespace std;
int main(int argc, char *argv[])
{
WSADATA wsd;
WSAStartup(MAKEWORD(2, 2), &wsd);
// 我方接头人
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 提供服务的商店地址
string host = "127.0.0.1";
int port = 8001;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(host.c_str());
addr.sin_port = htons(port);
// 打电话给对方
connect(sock, (struct sockaddr *)(&addr), sizeof(addr));
// 拨通后,聊天好不好。。
string say = "我要那种服务...";
send(sock, say.c_str(), say.length(), 0);
// 对话完成
closesocket(sock);
WSACleanup();
return 0;
}