您的位置:首页 > 其它

简单的客户/服务器程序(基于windows Socket API)

2010-01-21 11:56 351 查看
//服务器端

#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: