#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"WS2_32.lib")
#define MAX_PENDING_CONNECTS 4
//声明函数
char *ip;
void tt(void);
DWORD WINAPI HandleSocket(LPVOID lpParam);
//程序入口点
int main()
{
tt();
return 0;
}
void tt(void)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
//版本请求
wVersionRequested = MAKEWORD( 1, 1 );
//初始化WinSock(WSAStartup函数)
err = WSAStartup( wVersionRequested, &wsaData);
if ( err != 0 )
{ //初始化出错了退出函数
return;
}
//初始化成功!但版本不一致! 退出函数
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( ); //清除Socket
return; //退出函数
}
SOCKET sockfd=socket(AF_INET,SOCK_STREAM,0); //使用TCP协议
SOCKADDR_IN addrfd;
addrfd.sin_addr.S_un.S_addr=inet_addr("192.168.0.107");
addrfd.sin_family=AF_INET;
addrfd.sin_port=htons(6000); //端口6000
bind(sockfd,(SOCKADDR*)&addrfd,sizeof(SOCKADDR));
//监听端口开始
if(listen(sockfd,MAX_PENDING_CONNECTS)!=0)
{
printf("listen(sock) failed: %d\n ",::WSAGetLastError());
return;//ExitProcess(STATUS_FAILED);
}
printf("开始监听...\n");
while(true)
{
sockaddr_in addrfd_new;
int length=sizeof(addrfd_new);
SOCKET sockfd_new=accept(sockfd,(struct sockaddr*)&addrfd_new, &length);
ip = inet_ntoa(addrfd_new.sin_addr);
if(sockfd_new>=0)
{
printf("have client connect!\n");
//创建一个线程来处理socket请求threadHandle
DWORD id;
HANDLE threadHandle = CreateThread(0, 0,(LPTHREAD_START_ROUTINE)HandleSocket,(LPVOID)sockfd_new,0, &id);
}
else
{ //没有客户端接入
printf("没有客户端接入\n");
}
Sleep(200);
}
//关闭Socket变量sockfd和sockfd_new
closesocket(sockfd);
//清除Socket
WSACleanup();
}
DWORD WINAPI HandleSocket(LPVOID lpParam)
{
SOCKET sockfd_new=(SOCKET)lpParam;
char recvBuf[100];
char sendBuf[100];
while(1)
{
recv(sockfd_new,recvBuf,100,0);
cout<<ip<<"说:"<<endl;
cout<<recvBuf<<endl;
cout<<"本机说:"<<endl;
cin>>sendBuf;
send(sockfd_new,sendBuf,100,0);
}
closesocket(sockfd_new);
}
阅读(138) | 评论(0) | 转发(0) |