windows socket 通信(仅限局域网)
服务器端
#include <iostream>
#include <WinSock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
typedef struct _SockInfo{
SOCKET sock;
int id; //标记第几个客户连接
}SockInfo;
DWORD WINAPI clientThread(LPVOID lpParameter);
void main()
{
WORD wVersionRequested;
WSAData wsadata;
HANDLE hpthread = NULL;
int err;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup(wVersionRequested,&wsadata);
if (err != 0)
{
cout<<"can not bind the winsock32 dll"<<endl;
return;
}
if (LOBYTE(wsadata.wVersion) != 1 || HIBYTE(wsadata.wVersion) != 1)
{
WSACleanup();
return;
}
SOCKET socksrv = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrsrv;
addrsrv.sin_addr.S_un.S_addr = inet_addr("172.20.143.160");
addrsrv.sin_family = AF_INET;
addrsrv.sin_port = htons(6000);
bind(socksrv,(SOCKADDR*)&addrsrv,sizeof(SOCKADDR));
listen(socksrv,20);
int id = 0;
while(id < 20){
//用来解析客户端地址
SOCKADDR_IN addrclient;
int len = sizeof(SOCKADDR);
SOCKET tsock = accept(socksrv,(SOCKADDR*)&addrclient,&len);
if (tsock == INVALID_SOCKET)
{
cout<<"Accept Failed::"<<GetLastError()<<endl;
break;
}
SockInfo si;
si.sock = tsock;
si.id = id;
hpthread = CreateThread(NULL,0,clientThread,(LPVOID)&si,0,NULL);
id++;
}
closesocket(socksrv);
WSACleanup();
}
DWORD WINAPI clientThread( LPVOID lpParameter )
{
SockInfo* sockinfo = (SockInfo*)lpParameter;
char recvbuf[255];
recvbuf[0] = '\0';
int nrecv = recv(sockinfo->sock,recvbuf,255,0);
if (nrecv == 0 || nrecv == SOCKET_ERROR)
{
cout<<"The "<<sockinfo->id<<" client has exit"<<endl;
return 0;
}
cout<<"The "<<sockinfo->id<<"-time:"<<recvbuf<<endl;
return 0;
}
客户端
#include <iostream>
#include <WinSock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSAData wsadata;
int err;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup(wVersionRequested,&wsadata);
if (err != 0)
{
cout<<"can not bind the winsock32 dll"<<endl;
return;
}
if (LOBYTE(wsadata.wVersion) != 1 || HIBYTE(wsadata.wVersion) != 1)
{
WSACleanup();
return;
}
SOCKET sockclient = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrsrv;
addrsrv.sin_addr.S_un.S_addr = inet_addr("172.20.143.105");
addrsrv.sin_family = AF_INET;
addrsrv.sin_port = htons(6000);
connect(sockclient,(SOCKADDR*)&addrsrv,sizeof(SOCKADDR));
//while(connect(sockclient,(SOCKADDR*)&addrsrv,sizeof(SOCKADDR)) == SOCKET_ERROR);
while(1)
{
char recvbuf[255];
recvbuf[0] = '\n';
int n = recv(sockclient,recvbuf,255,0);
cout<<recvbuf<<endl;
char sendbuf[255];
cin>>sendbuf;
send(sockclient,sendbuf,strlen(sendbuf)+1,0);
}
closesocket(sockclient);
WSACleanup();
}
windows socket 通信(仅限局域网)
最新推荐文章于 2024-04-29 14:30:44 发布