//服务器端
#include<stdio.h>
#include< winsock2.h>
#include<windows.h>
BOOL InitSock();//加载winsock第一个版本进行版本协商
int main()
{
system("color 4f");
InitSock();//加载winsock第一个版本进行版本协商
//创建套接字
SOCKET m_SrvSocket=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN m_SrvAddr;
m_SrvAddr.sin_addr .S_un .S_addr =htonl(INADDR_ANY);
m_SrvAddr.sin_family =AF_INET;
m_SrvAddr.sin_port =htons(1024);
bind(m_SrvSocket,(SOCKADDR*)&m_SrvAddr,sizeof(SOCKADDR));//绑定端口号
if(SOCKET_ERROR==listen(m_SrvSocket,10))//监听客户端的请求
{
::MessageBox(NULL,"监听失败","failed",0);
closesocket(m_SrvSocket);
WSACleanup();
return 0;
}
SOCKADDR_IN m_ClientAddr;
int len=sizeof(SOCKADDR);
char Buf[200];
char Recv[200];
char SendBuf[200];
//SOCKET connect=accept(m_SrvSocket,(SOCKADDR*)&m_ClientAddr,&len);
printf("我是服务器,开始聊天.../n");
SOCKET connect=accept(m_SrvSocket,(SOCKADDR*)&m_ClientAddr,&len);//与客户端建立连接
if(connect== INVALID_SOCKET )
{
::MessageBox(NULL,"连接失败","ERROR",0);
closesocket(m_SrvSocket);
WSACleanup();
return 0;
}
//closesocket(connect);
while(1)
{
recv(connect,Recv,200,0);
//if('q'==Recv[0])
if(!strcmp("quit",Recv))
{
sendto(m_SrvSocket,"quit",strlen("quit")+1,0,(SOCKADDR*)&m_ClientAddr,len);
printf("Chat end!/n");
break;
}
sprintf(Buf,"%s say : %s",inet_ntoa(m_ClientAddr.sin_addr),Recv);
printf("%s/n",Buf);
gets(SendBuf);
send(connect,SendBuf,strlen(Buf)+1,0);
}
closesocket(connect);
closesocket(m_SrvSocket);
WSACleanup();
return 0;
}
BOOL InitSock()
{
//加载winsock第一个版本进行版本协商
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return false;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return false;
}
/* The WinSock DLL is acceptable. Proceed. */
return true;
}