服务端程序
#include <iostream>
#include <WinSock2.h>#pragma comment( lib, "ws2_32.lib")
using namespace std;
DWORD __stdcall _send(LPVOID lpram)
{
SOCKET client = (SOCKET)lpram;
char sendBuf[255];
int flag = 0;
while (1)
{
gets(sendBuf);
flag = send(client,sendBuf,strlen(sendBuf)+1,0);
if (flag <=0)
{
break;
}
}
closesocket(client);
return 0;
}
DWORD __stdcall _resv(LPVOID lpram)
{
SOCKET client = (SOCKET)lpram;
char recvBuf[255];
int flag= 0;
while (1)
{
flag = recv(client,recvBuf,255,0);
if (flag <=0)
{
break;
}
printf("%s\n",recvBuf);
}
closesocket(client);
return 0;
}
int main()
{
WSADATA data;
WORD versionRequested;
int err;
versionRequested = MAKEWORD(1,1);
err = WSAStartup(versionRequested,&data);
if (err !=0)
{
return -1;
}
if (!((data.wVersion ^ (data.wVersion>>8<<8) &1) && (data.wVersion>>8&1)))
{
WSACleanup();
return -1;
}
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
if (sockSrv == INVALID_SOCKET)
{
WSACleanup();
return -2;
}
//linux fcntl();
//ioctlsocket();
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(26800);
if (bind(sockSrv,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR)) == SOCKET_ERROR)
{
closesocket(sockSrv);
WSACleanup();
return -3;
}
if (listen(sockSrv,10) == SOCKET_ERROR)
{
closesocket(sockSrv);
WSACleanup();
return -4;
}
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
SOCKET sockClient = SOCKET_ERROR;
while (1)
{
while (sockClient == SOCKET_ERROR)
{
//accept(sockSrv,(SOCKADDR *)&addrClient,&len);
sockClient = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
}
printf("%s连接成功\n",inet_ntoa(addrClient.sin_addr));
DWORD m_ThreadId;
HANDLE m_ThreadSend = CreateThread(NULL,0,_send,(LPVOID)sockClient,0,&m_ThreadId);
HANDLE m_ThreadResv = CreateThread(NULL,0,_resv,(LPVOID)sockClient,0,&m_ThreadId);
sockClient = SOCKET_ERROR;
//WaitForSingleObject(m_ThreadSend, INFINITE);
//WaitForSingleObject(m_ThreadResv, INFINITE);
}
WSACleanup();
return 0;
}
客户端程序
#include <iostream>
#include <WinSock2.h>
#pragma comment( lib, "ws2_32.lib")
using namespace std;
DWORD __stdcall _send(LPVOID lpram)
{
SOCKET client = (SOCKET)lpram;
char sendBuf[255];
int flag = 0;
while (1)
{
gets(sendBuf);
flag = send(client,sendBuf,strlen(sendBuf)+1,0);
if (flag <=0)
{
printf("%d\n",WSAGetLastError());
break;
}
}
closesocket(client);
return 0;
}
DWORD __stdcall _resv(LPVOID lpram)
{
SOCKET client = (SOCKET)lpram;
char recvBuf[255];
int flag= 0;
while (1)
{
flag = recv(client,recvBuf,255,0);
if (flag <=0)
{
break;
}
printf("%s\n",recvBuf);
}
closesocket(client);
return 0;
}
int main()
{
WSADATA data;
WORD versionRequsted;
versionRequsted = MAKEWORD(2,2);
int err = WSAStartup(versionRequsted,&data);
if (err !=0)
{
return -1;
}
if (!((data.wVersion ^ (data.wVersion>>8<<8) &2) && (data.wVersion>>8&2)))
{
WSACleanup();
return -1;
}
{
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(26800);
printf("%d\n",connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)));
DWORD m_ThreadId;
HANDLE m_ThreadSend = CreateThread(NULL,0,_send,(LPVOID)sockClient,0,&m_ThreadId);
HANDLE m_ThreadResv = CreateThread(NULL,0,_resv,(LPVOID)sockClient,0,&m_ThreadId);
WaitForSingleObject(m_ThreadSend, INFINITE);
WaitForSingleObject(m_ThreadResv, INFINITE);
}
WSACleanup();
return 0;
}