服务端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#pragma comment(lib,"ws2_32.lib")
#include
#include
#include
#include
客户端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#pragma comment(lib,"ws2_32.lib")
#include
#include
DWORD WINAPI RecvMsg(const SOCKET* clientSocket)
{
while (1)
{
char recvStr[100] = {};
int recvRet = recv(*clientSocket, recvStr, sizeof(recvStr), 0);
if (recvRet != -1)
printf("服务器说:%s\n", recvStr);
else
{
printf("服务器已断开\n");
closesocket(*clientSocket);
WSACleanup();
system("pause");
closesocket(*clientSocket);
WSACleanup();
exit(0);
}
}
return 0;
}
int main()
{
WSADATA wsaData = { 0 };
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
//******bind自定义端口号测试*********/
SOCKADDR_IN clientSockAddr_in = { 0 };
clientSockAddr_in.sin_family = AF_INET;
clientSockAddr_in.sin_addr.S_un.S_addr = INADDR_ANY; //本机IP
clientSockAddr_in.sin_port = htons(2222);
if(bind(clientSocket, (SOCKADDR*)&clientSockAddr_in, sizeof(clientSockAddr_in)) == SOCKET_ERROR)
{
std::cout << "绑定套接字失败\n";
closesocket(clientSocket);
WSACleanup();
system("pause");
return 0;
}
/***************************************/
SOCKADDR_IN sockaddr_in;
sockaddr_in.sin_family = AF_INET;
sockaddr_in.sin_addr.S_un.S_addr = inet_addr("172.16.20.203"); //inet_addr("192.168.18.173"); //服务端ip地址
//sockaddr_in.sin_addr.S_un.S_addr = inet_addr("192.168.74.128");
sockaddr_in.sin_port = htons(8888); //服务端监听的端口
int conRet = connect(clientSocket,(SOCKADDR*)&sockaddr_in, sizeof(sockaddr_in));
if (conRet != SOCKET_ERROR)
{
printf("连接成功\n");
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)RecvMsg, &clientSocket, 0, 0);
}
else
{
printf("连接失败,返回%d\n", conRet);
closesocket(clientSocket);
WSACleanup();
}
while (1)
{
printf("输入内容\n");
char sendStr[10000] = {};
//scanf("%s", sendStr); //遇到空格会截断后面内容
gets_s(sendStr, sizeof(sendStr));
int ret = send(clientSocket, sendStr, strlen(sendStr), 0);
if (ret != 0)
printf("客户端发送数据%dbyte\n", ret);
}
}