1.加載套接字庫c++
2.建立套接字服務器
3.鏈接套接字網絡
4.設置可監聽的客戶端的最大數量socket
5.發送數據給客戶端函數
6.接收客戶端傳來的數據ui
7.關閉鏈接spa
// TCPServer.cpp : 定義控制檯應用程序的入口點。
// TCP通訊服務器端代碼
#include "stdafx.h"
using namespace std;
bool SetTcpServer() {
//1.加載套接字庫
WORD w_version_req = MAKEWORD(2,2); //初始化WinSock版本號
WSADATA wsaData;
int flag_InitWSA = WSAStartup(w_version_req,&wsaData); //具體參數含義參考:https://blog.csdn.net/clemontine/article/details/53141041
//flag_InitWSA 不爲0則說明初始化失敗
if (flag_InitWSA != 0)
{
cout << "初始化WSAStartup失敗!"<<endl;
return false;
}
//wsaData爲空指針,說明初始化失敗
if (&wsaData == nullptr)
{
cout << "初始化失敗,&wsaData爲空指針!" << endl;
return false;
}
//2.建立套接字
SOCKET socketServer = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN socketAddr;
socketAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //須要接收任意的IP地址
socketAddr.sin_family = AF_INET;
socketAddr.sin_port = htons(6000);//端口號
//3.鏈接套接字
bind(socketServer,(SOCKADDR*)&socketAddr,sizeof(SOCKADDR));
//4.設置監聽客戶端數量
listen(socketServer,5);
cout << "啓動監聽" << endl;
SOCKADDR_IN sockclient;
int len=sizeof(SOCKADDR);
SOCKET sockCon=accept(socketServer,(SOCKADDR*)&sockclient,&len);//建立連接套接字
//5.發送數據到客戶端
const char* sendBuf = "hey,在嗎?";
send(sockCon,sendBuf,strlen(sendBuf)+1,0);
//6.接收客戶端發來的消息
char recvBuf[250];
recv(sockCon,recvBuf,250,0);//發送\接收函數
cout <<"收到的客戶端發來的信息爲:" << recvBuf << endl;
//7.關閉服務器
closesocket(sockCon);//關閉套接字
WSACleanup();
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
SetTcpServer();
cout << "服務器關閉!" << endl;
int mm ;
cin >> mm;
return 0;
}
複製代碼
1.加載套接字庫.net
2.建立套接字指針
3.鏈接套接字code
4.發送數據到服務器
5.關閉套接字
// TCPClient.cpp : 定義控制檯應用程序的入口點。
// TCP網絡通訊客戶端代碼
#include "stdafx.h"
using namespace std;
bool SetTcpClient() {
//1.加載套接字庫
WORD w_version_req = MAKEWORD(2,2); //初始化WinSock版本號
WSADATA wsaData;
int flag_InitWSA = WSAStartup(w_version_req,&wsaData); //具體參數含義參考:https://blog.csdn.net/clemontine/article/details/53141041
//flag_InitWSA 不爲0則說明初始化失敗
if (flag_InitWSA != 0)
{
cout << "初始化WSAStartup失敗!"<<endl;
return false;
}
//wsaData爲空指針,說明初始化失敗
if (&wsaData == nullptr)
{
cout << "初始化失敗,&wsaData爲空指針!" << endl;
return false;
}
//2.建立套接字
SOCKET socketClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN socketAddr;
socketAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //須要接收的IP地址
socketAddr.sin_family = AF_INET;
socketAddr.sin_port = htons(6000);//端口號
//3.鏈接套接字
connect(socketClient,(SOCKADDR*)&socketAddr,sizeof(SOCKADDR));
//4.發送數據到服務器
char receiveBuf[250];
recv(socketClient,receiveBuf,250,0);//接收服務器的消息
cout <<"服務端發來消息:" <<receiveBuf << endl;
const char* sendBuf = "我今天還能夠,天氣不錯!";
send(socketClient,sendBuf,strlen(sendBuf)+1,0); //+1是由於要包含\n字符 發送給服務器消息
//5.關閉套接字
closesocket(socketClient);
WSACleanup();
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
//啓動客戶端
SetTcpClient();
cout << "客戶端關閉" << endl;
int msg_stop;
cin >> msg_stop;
return 0;
}
複製代碼
啓動客戶端和服務器
運行結果:
說明TCP 通訊成功!