资源简介
//****************************************************
// File: HB_Server.cpp
// Language: Visual C++
// IDE: VS2010
// Project: Win32 Console+预编译头
// Author: Dearggae
// Date: 2012.10.31
// Function: 支持不同类型信息的接收回射服务器
//****************************************************
//****************************************************
// File: HB_Client.cpp
// Language: Visual C++
// IDE: VS2010
// Project: Win32 Console+预编译头
// Author: Dearggae
// Date: 2012.10.31
// Function: 支持不同类型信息的发送回射客户端
//****************************************************
代码片段和文件信息
//****************************************************
// File: HB_Client.cpp
// Language: Visual C++
// IDE: VS2010
// Project: Win32 Console+预编译头
// Author: Dearggae
// Date: 2012.10.31
// Function: 支持不同类型信息的发送回射客户端
//****************************************************
#include “stdafx.h“
#include “typedef.h“
#include
#include “windows.h“
#include
#include
#pragma comment(lib“WS2_32.lib“)
DWORD WINAPI SendThread(LPVOID); //发送线程函数
DWORD WINAPI RecvThread(LPVOID); //接收线程函数
DWORD WINAPI HBThread(LPVOID); //心跳线程函数
void CheckError(intchar*); //查错处理
STRING GetSystemTime(); //获取系统时间
void Close(); //释放服务器
SOCKET sHost;
int Ret;
int _tmain(int argc _TCHAR* argv[])
{
WSADATA wsd;
SOCKADDR_IN Server;
DWORD SendThreadId;
DWORD RecvThreadId;
DWORD HBThreadId;
int iaddrSize = sizeof(SOCKADDR_IN);
//初始化WinSocket环境
if(WSAStartup(MAKEWORD(22)&wsd) != 0)
{
printf(“WSAStartup failed !\n“);
system(“pause“);
exit(0);
}
//创建监听Socket
sHost = socket(AF_INETSOCK_STREAMIPPROTO_TCP);
if(INVALID_SOCKET == sHost)
{
printf(“socket failed !\n“);
system(“pause“);
exit(0);
}
//绑定
Server.sin_family = AF_INET;
Server.sin_port = htons(PORT);
Server.sin_addr.S_un.S_addr = inet_addr(SERVER_IP);
//绑定Sockets Server到本地地址
Ret = connect(sHost(LPSOCKADDR)&Serversizeof(Server));
CheckError(Ret“HB_Client(): Connect Failed“);
printf(“Connect Success ! \n“);
//================================================
CreateThread(NULL 0 SendThread NULL 0 &SendThreadId);
CreateThread(NULL 0 RecvThread NULL 0 &RecvThreadId);
CreateThread(NULL 0 HBThread NULL 0 &HBThreadId);
Sleep(1000000);
return 0;
}
DWORD WINAPI SendThread(LPVOID lpParam)
{
char msg[MSG_SIZE];
char buf[MSG_SIZE+HEAD_SIZE];
while(true)
{
Sleep(SEND_TIME);
ZeroMemory(msgMSG_SIZE);
ZeroMemory(bufMSG_SIZE);
printf(“Please input a string to send (send exit ~ ): “);
std::string str;
getline(std::cinstr);
strcpy_s(msgstr.c_str());
sprintf_s(buf“%04d%s“MSG_COMmsg);
Ret = send(sHostbufstrlen(buf)0);
CheckError(Ret“SendThread: Send Failed“);
while (Ret<=0) //实现超时重发功能
{
Sleep(SEND_TIMEOUT);
Ret = send(sHostbufstrlen(buf)0);
}
}
return 0;
}
DWORD WINAPI RecvThread(LPVOID lpParam)
{
char buf[MSG_SIZE+HEAD_SIZE];
char msg[MSG_SIZE];
char head[HEAD_SIZE+1];
int MsgType;
int len;
while(TRUE)
{
ZeroMemory(headHEAD_SIZE+1);
ZeroMemory(msgMSG_SIZE);
ZeroMemory(bufMSG_SIZE+HEAD_SIZE);
Ret = recv(sHostbufMSG_SIZE+HEAD_SIZE0);
CheckError(Ret“RecvThread: Recv Failed“);
len = strlen(buf);
strncpy_s(headbufHEAD_SIZE);
sscanf_s(head“%d\n“&MsgType);
strncpy_s(msgbuf+HEAD_SIZElen-HEAD_SIZE);
switch (MsgType)
{
case MSG_COM :
printf(“%s Recv From Server : %s\n“GetSystemTime().strmsg)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1602 2012-10-31 11:08 HB_Client\Debug\cl.command.1.tlog
文件 23914 2012-10-31 11:08 HB_Client\Debug\CL.read.1.tlog
文件 1032 2012-10-31 11:08 HB_Client\Debug\CL.write.1.tlog
文件 406 2012-10-30 21:23 HB_Client\Debug\HB_Client.exe.em
文件 472 2012-10-30 21:23 HB_Client\Debug\HB_Client.exe.em
文件 381 2012-10-31 11:08 HB_Client\Debug\HB_Client.exe.intermediate.manifest
文件 73 2012-10-31 11:08 HB_Client\Debug\HB_Client.lastbuildstate
文件 2358 2012-10-31 11:08 HB_Client\Debug\HB_Client.log
文件 134450 2012-10-31 11:08 HB_Client\Debug\HB_Client.obj
文件 1179648 2012-10-30 21:14 HB_Client\Debug\HB_Client.pch
文件 208 2012-10-30 21:14 HB_Client\Debug\HB_Client_manifest.rc
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 2 2012-10-31 11:08 HB_Client\Debug\li
文件 1838 2012-10-31 11:08 HB_Client\Debug\li
文件 3744 2012-10-31 11:08 HB_Client\Debug\li
文件 1094 2012-10-31 11:08 HB_Client\Debug\li
文件 426 2012-10-31 11:08 HB_Client\Debug\mt.command.1.tlog
文件 594 2012-10-31 11:08 HB_Client\Debug\mt.read.1.tlog
............此处省略73个文件信息
相关资源
- 流式套接字定长变长接收回射实验报
- c语言多线程计算PI
- MFC基于多线程的聊天程序用了winsock套
- Linux下纯C语言 多线程 人机 贪吃蛇
- vs2010下c语言编写c/s socket 文件内容传
- 简单多线程socket聊天室程序(c语言)
- QT C++ 多线程支持多串口通信
- 给予c++的多线程
- 局域网活动主机扫描程序
- 随机迷宫生成迷宫自动寻路软件VS20
- mfc实现多线程工程代码和线程进程查
- MFC中的多线程同步
- Pthread 多线程C++动态库+静态库+头文件
- 基于Linux C语言的多线程模拟智能家具
- c++多线程的创建挂起执行与销毁
- MFC多线程编程示例47598
- c++11多线程库之线程库使用
- c++11多线程库之互斥库使用
- C C++ Linux多线程文件程序
- 多线程C++爬虫程序
- vc++实现哲学家吃面问题
- 多线程产生Fibonacci序列
- MFC同步线程类
- MFC用户界面线程的创建
- 基于C#写的TCP 客户端多线程处理源码
- HJ212TCPServerC.rar(TCP Socket多线程服务端
- VC环境下高速实时数据采集的实现
- VC++ 多任务多线程程序源码
- C++多线程SOCKET收发
- Linux网络编程
评论
共有 条评论