// ser.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#define PORT 5050
#define SER_DATA_BUFFER 4096
DWORD WINAPI ClientThread(LPVOID lpParam);
void main()
{
HANDLE hThread;
DWORD dwThreadId;
SOCKET sClient;
int iPort=PORT;
WSADATA wsaData;
SOCKET sListen;
int iCliLen;
char SerRecvBuf[SER_DATA_BUFFER]="";
struct sockaddr_in ser,cli;
printf("************************\n");
printf("计算器操作远程监控程序:\n");
if (WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Failed to load Winsock.\n");
return;
}
sListen=socket(AF_INET,SOCK_STREAM,0);
if (sListen==INVALID_SOCKET)
{
printf("socket() Failed:%d\n",WSAGetLastError());
return;
}
ser.sin_family=AF_INET;
ser.sin_port=htons(iPort);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if (bind(sListen,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR)
{
printf("bind() Failed:%d\n",WSAGetLastError());
return;
}
listen(sListen,8);
printf("************************\n");
printf("等待连接:\n");
printf("************************\n");
while(1)
{
iCliLen=sizeof(cli);
sClient=accept(sListen,(struct sockaddr*)&cli,&iCliLen);
if(sClient==INVALID_SOCKET)
{
printf("accept() Failed:%d\n",WSAGetLastError());
break;
}
printf("************************\n");
printf("连接成功:\n");
printf("************************\n");
printf("客户端IP:[%s]\n客户端端口:[%d]\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));
printf("************************\n");
hThread=CreateThread(NULL,0,ClientThread,(LPVOID)sClient,0,&dwThreadId);
if (hThread==NULL)
break;
CloseHandle(hThread);
}
closesocket(sListen);
WSACleanup();
}
DWORD WINAPI ClientThread(LPVOID lpParam)
{
SOCKET ThreadSock=(SOCKET)lpParam;
char szBuff[200];
int recvlen;
while(1)
{
recvlen=recv(ThreadSock,szBuff,200,0);
if (recvlen==0)
break;
else if(recvlen==SOCKET_ERROR)
{
printf("************************\n");
printf("连接断开:%d\n",WSAGetLastError());
printf("************************\n");
printf("等待连接:\n");
printf("************************\n");
break;
}
szBuff[recvlen]='\0';
printf("%s",szBuff);
printf(" ");
}
return 0;
}