简单的客户/服务器程序(基于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;
}
#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;
}
相关文章推荐
- 简单的基于 winsock API的 smtp 信件发送程序。
- 最简单的基于FFMPEG的Helloworld程序
- 一个简单的基于socket的通讯处理程序
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- TCP客户/服务器简单Socket程序
- 基于android手机的3G+GPS远程控制模型车工程-android手机编程1-简单通信程序
- 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
- 基于TCP/IP的简单的聊天程序
- 【Unix 网络编程】TCP 客户/服务器简单 Socket 程序
- linux下基于TCP简单的socket通信程序
- 基于控制台或Win32 API程序生成文件版本信息
- Unix网络编程 第一卷 套接口API 第五章 TCP客户/服务器程序例子
- linux下基于tcp的简单的接收与发送程序,开发板与本机接收与发送信息
- 基于API的录音机程序
- Windows Socket 编程_ 简单的服务器/客户端程序
- 简单vulkan程序的API调用步骤总结
- Windows下基于API的串口程序
- 基于AJAX的长轮询(long-polling)方式实现简单的聊天室程序
- Microwindows及基于Nano-X的简单程序开发
- 简单的 Nova REST API 实现程序