server.cpp
#include <iostream>
#include <string.h>
#include <windows.h>
#define PORT 5000
using namespace std;
#pragma comment(lib,"ws2_32.lib")
DWORD WINAPI RecvSendMessage(LPVOID arg)
{
char serbuff[255];
char clibuff[255];
SOCKET sockCli = *(SOCKET*)arg;
while (1)
{
int ret = recv(sockCli, serbuff, sizeof(serbuff), 0);
cout << serbuff << endl;
cin >> clibuff;
send(sockCli, clibuff, strlen(clibuff) + 1, 0);
}
return (DWORD)0;
}
int main()
{
INT Ret;
WSADATA wsaData;
// 初始化WinSock环境
if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
{
printf("WSAStartup() failed with error %d\n", Ret);
WSACleanup();
return -1;
}
SOCKET sockSer, sockCli;
SOCKADDR_IN addrSer, addrCli;
sockSer = socket(AF_INET,SOCK_STREAM,0);
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(PORT);
addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int len = sizeof(SOCKADDR);
bind(sockSer,(SOCKADDR*)&addrSer,len);
listen(sockSer,5);
cout << "服务器正在等待......" << endl;
sockCli = accept(sockSer, (SOCKADDR*)&addrCli, &len);
if (sockCli <= 0)
{
cout << "Accept Error!!!" << endl;
}
else
{
cout << "Accept Successed!!!" << endl;
}
HANDLE hThread;
DWORD ThreadId;
cout << "Ser:>" << endl;
while (1)
{
hThread = CreateThread(NULL, 0, &RecvSendMessage, (LPVOID)&sockCli, 0, &ThreadId);
WaitForSingleObject(hThread, INFINITE);
}
return 0;
}
client.cpp
#include <iostream>
#include <windows.h>
using namespace std;
#define PORT 5000
#pragma comment(lib,"ws2_32.lib")
int main()
{
INT Ret;
WSADATA wsaData;
//同步版本。
if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
{
printf("WSAStaartup() failes with error %d\n",Ret);
WSACleanup();
return -1;
}
SOCKET sockCli = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrCli;
addrCli.sin_family = AF_INET;
addrCli.sin_port = htons(PORT);
addrCli.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int ret = connect(sockCli, (SOCKADDR*)&addrCli, sizeof(SOCKADDR));
if (ret < 0)
{
cout << "connect error!!" << endl;
WSACleanup();
cout << ret << endl;
return -1;
}
char serbuff[255];
char clibuff[255];
while (1)
{
cin >> serbuff;
send(sockCli,serbuff,strlen(serbuff)+1,0);
recv(sockCli,clibuff,sizeof(clibuff),0);
cout << clibuff << endl;
}
return 0;
}