Windows 采用Socket方式实现服务器和客户端的数据访问
来源:互联网 发布:英雄无敌3括号数据 编辑:程序博客网 时间:2024/06/06 03:41
摘要:采用以CAsyncSocket为基类的服务器Socket接口类,实现服务器和客户端的数据访问。
Sever:
#pragma once
// CListenSocket 命令目标
class CListenSocket : public CAsyncSocket
{
public:
CListenSocket();
virtual ~CListenSocket();
void OnReceive(int nErrorCode);
void OnSend(int nErrorCode);
void OnAccept(int nErrorCode);
void OnClose(int nErrorCode);
};
// ListenSocket.cpp : 实现文件
//
#include "stdafx.h"
#include "Server.h"
#include "ListenSocket.h"
// CListenSocket
CListenSocket::CListenSocket(){}
CListenSocket::~CListenSocket(){}
void CListenSocket::OnReceive(int nErrorCode)
{
char buf[255];
int length;
length = Receive(buf,sizeof(buf));
if (length <= 0)
{
nErrorCode = WSAGetLastError();
return;
}
if (buf[0] == 'g')
{
//GetPeerName()
}
else if(buf[0] = 's')
{
char sendbuf[] = "I LOVE YOU";
Send(sendbuf,sizeof(sendbuf));
}
}
void CListenSocket::OnSend(int nErrorCode)
{
__super::OnSend(nErrorCode);
}
void CListenSocket::OnAccept(int nErrorCode)
{
CListenSocket *pListenSocket = new CListenSocket;
CString strTemp;
if (Accept(*pListenSocket))
{
struct sockaddr_in peeraddr;
socklen_t len;
int ret = pListenSocket->GetPeerName((struct sockaddr *)&peeraddr, &len);
strTemp.Format(_T("Port:%d"),peeraddr.sin_port);
/*RichEditAddLine(strTemp);*/
}
else
{
nErrorCode = GetLastError();
strTemp.Format(_T("Error Code:%d"),nErrorCode);
/*RichEditAddLine(strTemp,RGB(255,0,0));*/
}
}
void CListenSocket::OnClose(int nErrorCode)
{
__super::OnClose(nErrorCode);
}
// CListenSocket 成员函数
Client:
#pragma once
class CEasySocket
{
public:
CEasySocket(void);
~CEasySocket(void);
bool Connect(const char*addr,UINT port);
bool SendAndRecvData(const CString& strSendBuf,CString& strRecvBuf,bool Status = false,int millsec = 3000);
private:
SOCKET m_sock;
};
#include "StdAfx.h"
#include "EasySocket.h"
CEasySocket::CEasySocket(void)
{
m_sock = socket(AF_INET,SOCK_STREAM,0);
}
CEasySocket::~CEasySocket(void)
{
closesocket(m_sock);
}
bool CEasySocket::Connect(const char*addr,UINT port)
{
SOCKADDR_IN addr_in;
addr_in.sin_family = AF_INET;
addr_in.sin_addr.s_addr = inet_addr(addr);
addr_in.sin_port = htons(port);
int ret = ::connect(m_sock,(struct sockaddr*)&addr_in,sizeof(struct sockaddr));
return ret == 0;
}
bool CEasySocket::SendAndRecvData(const CString& strSendBuf,CString& strRecvBuf,bool Status /* = false */,int millsec /* = 3000 */)
{
if (strSendBuf.IsEmpty())return false;
int length = strSendBuf.GetLength();
char sendbuf[255];
sprintf(sendbuf,"s %s",strSendBuf);
int len = ::send(m_sock,sendbuf,length,0);
char recvBuf[255];
if (len == length)
{
::recv(m_sock,recvBuf,sizeof(recvBuf),0);
Sleep(millsec);
}
strRecvBuf = recvBuf;
return true;
}
/**/
- Windows 采用Socket方式实现服务器和客户端的数据访问
- 服务器推送数据 和 客户端定时访问服务器的实现
- 采用异步socket实现客户端和服务端的通信
- java socket实现的客户端和服务器端,服务器采用多线程实现,为每个客户分配一个线程
- 最简单的Windows Socket代码,包括服务器和客户端
- flex采用blazeds实现服务器向客户端推数据
- flex采用blazeds实现服务器向客户端推数据
- flex采用blazeds实现服务器向客户端推数据
- java 通过 socket 实现 服务器和客户端的通信 TCP
- VC Socket 实现服务器和客户端的通讯
- Android Socket编程android端服务器和客户端的实现
- socket实现简单的echo应答服务器和客户端
- 利用socket实现服务器和客户端的远程桌面
- java网络编程----------Socket实现客户端和服务器的连接
- socket服务器和客户端的建立步骤。Python实现
- flex采用blazeds实现服务器向(特定标识的)客户端推数据(基于consumer模式)
- Flex采用blazeds实现服务器向(特定标识的)客户端推数据(基于consumer模式)
- 简易socket客户端和多线程服务器实现
- 图的学习-huffman code
- 这就是线程
- Android开发与MVC设计模式
- POJ 1012 Joseph
- 关于wifi密码获取(恶意攻击)
- Windows 采用Socket方式实现服务器和客户端的数据访问
- 2017年上海金马五校程序设计竞赛:Problem I : Frog's Jumping
- 算法--枚举策略
- 正则表达式大全
- Django11-表单(Form)
- 比较好的网址记录
- c语言实现fcfs,rr_1,spn,srt4种调度算法(无数据结构)
- php判断session是否设置
- 【模板】Andrew算法 求凸包