window下c语言c s通信,c++ Windows Socket实现最简单的C/S网络通信(TCP)

1.服务器端代码:

#include

#include

#pragma comment(lib, "ws2_32.lib")

#define CONNECT_NUM_MAX 10

using namespace std;

int main()

{

//加载套接字库

WSADATA wsaData;

int iRet = 0;

iRet = WSAStartup(MAKEWORD(2, 2), &wsaData);

if (iRet != 0)

{

cout << "WSAStartup(MAKEWORD(2, 2), &wsaData) execute failed!" << endl;;

return -1;

}

if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))

{

WSACleanup();

cout << "WSADATA version is not correct!" << endl;

return -1;

}

//创建套接字

SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);

if (serverSocket == INVALID_SOCKET)

{

cout << "serverSocket = socket(AF_INET, SOCK_STREAM, 0) execute failed!" << endl;

return -1;

}

//初始化服务器地址族变量

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

addrSrv.sin_family = AF_INET;

addrSrv.sin_port = htons(6000);

//绑定

iRet = bind(serverSocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

if (iRet == SOCKET_ERROR)

{

cout << "bind(serverSocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) execute failed!" << endl;

return -1;

}

//监听

iRet = listen(serverSocket, CONNECT_NUM_MAX);

if (iRet == SOCKET_ERROR)

{

cout << "listen(serverSocket, 10) execute failed!" << endl;

return -1;

}

//等待连接_接收_发送

SOCKADDR_IN clientAddr;

int len = sizeof(SOCKADDR);

while (1)

{

SOCKET connSocket = accept(serverSocket, (SOCKADDR*)&clientAddr, &len);

if (connSocket == INVALID_SOCKET)

{

cout << "accept(serverSocket, (SOCKADDR*)&clientAddr, &len) execute failed!" << endl;

return -1;

}

char sendBuf[100];

sprintf_s(sendBuf, "Welcome %s", inet_ntoa(clientAddr.sin_addr));

send(connSocket, sendBuf, strlen(sendBuf)+1, 0);

char recvBuf[100];

recv(connSocket, recvBuf, 100, 0);

printf("%s\n", recvBuf);

closesocket(connSocket);

}

system("pause");

return 0;

}

2.客户端代码:

#include

#include

using namespace std;

#pragma comment(lib, "ws2_32.lib")

int main()

{

//加载套接字库

WSADATA wsaData;

int iRet =0;

iRet = WSAStartup(MAKEWORD(2, 2), &wsaData);

if (iRet != 0)

{

cout << "WSAStartup(MAKEWORD(2, 2), &wsaData) execute failed!" << endl;

return -1;

}

if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))

{

WSACleanup();

cout << "WSADATA version is not correct!" << endl;

return -1;

}

//创建套接字

SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);

if (clientSocket == INVALID_SOCKET)

{

cout << "clientSocket = socket(AF_INET, SOCK_STREAM, 0) execute failed!" << endl;

return -1;

}

//初始化服务器端地址族变量

SOCKADDR_IN srvAddr;

srvAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

srvAddr.sin_family = AF_INET;

srvAddr.sin_port = htons(6000);

//连接服务器

iRet = connect(clientSocket, (SOCKADDR*)&srvAddr, sizeof(SOCKADDR));

if (0 != iRet)

{

cout << "connect(clientSocket, (SOCKADDR*)&srvAddr, sizeof(SOCKADDR)) execute failed!" << endl;

return -1;

}

//接收消息

char recvBuf[100];

recv(clientSocket, recvBuf, 100, 0);

printf("%s\n", recvBuf);

//发送消息

char sendBuf[100];

sprintf_s(sendBuf, "Hello, This is client %s", "兔子");

send(clientSocket, sendBuf, strlen(sendBuf)+1, 0);

//清理

closesocket(clientSocket);

WSACleanup();

system("pause");

return 0;

}

3.程序运行截图:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值