25
2014
03

c++ windowsSocket通讯连接效时服务器并获取返回消息简单用例

code:

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <WINSOCK2.H>
#include "resource.h"
#include "MainDlg.h"
#define HIGHTIME 21968699
#define LOWTIME  4259332096 
/*
*/
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }
    return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
{
SocketTest();
}
        break;
        default:
break;
    }
}
void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}
void SocketTest()
{
////在连接中加上 WSOCK32.LIB
WSADATA wsaData;
//初始化Socket库
WSAStartup(MAKEWORD(2,0),&wsaData);
//创建
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN sa;
sa.sin_family=AF_INET;
//设置连接服务器端的端口
sa.sin_port = htons(IPPORT_TIMESERVER);//端口号
//218.107.63.213是ping smtp.163.com出来的
sa.sin_addr.S_un.S_addr = inet_addr("218.107.63.213");//www.time.ac.cn-210.72.145.8
if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
{
ShowError();
return;
}
/*
//接收连接到的消息1
TCHAR buff[256];
ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR));
recv(sock,buff,sizeof(buff)/sizeof(TCHAR),0);
MessageBox(NULL,buff,"返回消息",MB_OK);
//发消息1
TCHAR msg[]="QUIT\n";
send(sock,msg,sizeof(msg)/sizeof(TCHAR),0);
ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR));
recv(sock,buff,sizeof(buff)/sizeof(TCHAR),0);
MessageBox(NULL,buff,"返回消息",MB_OK);
*/
//接收连接到的消息2
unsigned long ulTime=0;
recv(sock,(char*)&ulTime,sizeof(unsigned long),0);
ulTime=ntohl(ulTime);//把网络字节序转化为本机字节序
TCHAR buff1[256]={0};
wsprintf(buff1,"%i",ulTime);
MessageBox(NULL,buff1,"返回消息",MB_OK);//获取到的时间不对,www.time.ac.cn有问题,直接放到 http://tool.chinaz.com/Tools/unixtime.aspx 转换都不对。
////把unix时间转化为系统时间
SYSTEMTIME st;
UINT64 uiCurtime,uiBasetime,uiResult;
uiBasetime=((UINT64)HIGHTIME<<32)+LOWTIME;
uiCurtime=(UINT64)ulTime*(UINT64)10000000;
uiResult=uiBasetime+uiCurtime;
uiResult=uiBasetime;
FileTimeToSystemTime((LPFILETIME)&uiResult,&st);
TCHAR buff[256]={0};
wsprintf(buff,"%d年%d月%d日 %d:%d:%d",st.wYear,st.wMonth,st.wDay,st.wHour+8,st.wMinute,st.wSecond);
MessageBox(NULL,buff,"返回消息",MB_OK);
//设置系统时间
//SetSystemTime(&st);
closesocket(sock);
WSACleanup();
}
void ShowError()
{
TCHAR* lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| //自动分配消息缓冲区
  FORMAT_MESSAGE_FROM_SYSTEM, //从系统获取信息
  NULL,GetLastError(), //获取错误信息标识
  MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系统缺省语言
  (LPTSTR)&lpMsgBuf, //消息缓冲区
  0,
  NULL);
MessageBox(NULL,lpMsgBuf,"",MB_ICONERROR); 
}


18
2014
03

[转载].net中的正则表达式使用高级技巧

一、前言

17
2014
03

c++中fstream类对文本文件的操作

code:

#include <iostream>
#include <string> 
#include<fstream>
using namespace std;
//追加方式写文件
void writefile()
{
fstream f("try.txt",ios::out|ios::app);
if(!f){
    cout<<"File open error!\n";
    return;
}
f<<123<<" "<<456<<" "<<"my name is aa\n";
f.close();
}
//读取文件
void readfile()
{
fstream f("try.txt",ios::in);
if(!f){
    cout<<"File open error!\n";
    return;
}
int a,b;
char s[20];
while(1)
{
a=0;b=0;
s[0]=0;
 f>>a>>b;
 f.getline(s,20);
 if(a==0) break;//循环读取数据,没有数据时退出
 cout<<a<<" "<<b<<" "<<s<<endl;
}
f.close();
}
///复制文件二进制数据
void copybinary()
{
ifstream fin("try1.txt",ios::in|ios::binary);
  if(!fin){
    cout<<"File open error!\n";
    return;
  }
  ofstream fout("try2.txt",ios::out|ios::binary);
  char c[1024];
  int count=0;
  while(!fin.eof())
  {
    fin.read(c,1024);
count=fin.gcount();
for(int i=0;i<count;i++)
{
c[i]=255-c[i];//字节取反,可以实现程序加密,让别人打不开,自己知道哪个字节少了多少,再还原
}
    fout.write(c,count);
  }
  fin.close();
  fout.close();
  cout<<"Copy over!\n";
}
int main()
{
/*writefile();
readfile();*/
copybinary();
return 0;
}


14
2014
03

[转载]使用vs2010编写c++Win32 Console Project时会出“error LNK1123” 错误解决方法

终极解决方案:

VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误,


解决方案为 将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”即可,但是每新建一个项目都要这样设置一次,很麻烦



在建立VS2010 Win32 Project项目时,按照上面解决方案依然发生了“error LNK1123”错误,经过上网查资料,解决方案为:

24
2014
02

序列化和反序列化,异步调用web/wcf/函数

xml序列化、反序列化

 

       //xml序列化
        public static string Seria(DataSet ds)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(DataSet));
            StringBuilder sb = new StringBuilder();
            XmlWriter writer = XmlWriter.Create(sb);
            serializer.Serialize(writer, ds);
            return sb.ToString();
        }
        //xml反序列化
        public static DataSet DeSeria(string sb)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(DataSet));
            StringReader sr = new StringReader(sb);
            XmlReader xr = XmlReader.Create(sr);
            DataSet ds = (DataSet)serializer.Deserialize(xr);
            return ds;
        }
        public static string Seria<T>(T ds)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            StringBuilder sb = new StringBuilder();
            XmlWriter writer = XmlWriter.Create(sb);
            serializer.Serialize(writer, ds);
            return sb.ToString();
        }
        //xml反序列化
        public static T DeSeria<T>(string sb)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            StringReader sr = new StringReader(sb);
            XmlReader xr = XmlReader.Create(sr);
            T ds = (T)serializer.Deserialize(xr);
            return ds;
        }


10
2014
02

.Net消息队列的使用-MSMQ

.Net使用消息队列,借助windows组件来存储要完成的一系列任务,不用程序使用同一个队列,方便不同程序之间的数据共享和协作……

以本人经验,这个在某个方面类似于session(当然还有很多方面不同),相同之处:session可以把信息存储在aspnet_state服务中,网站重新编译或者重新启动网站,session不会丢失(session超时是正常情况,这种情况除外)。

07
2014
02

业余初学php经验1


学习网站:http://www.w3school.com.cn/PHP/index.asp

21
2014
01

Memcached1.4.13(32、64位windows)在.Net中使用

创建自动启动windows服务命令:

sc create "Memcached Server" binpath= "E:\Memcached\memcached.exe -d runservice -l 127.0.0.1 -m 512 -c 2048 -p 11011" DisplayName= "Memcached Server" start= auto


17
2014
01

u盘插入电脑不显示容量,也打不开的一种解决方法

1、卸载原有的驱动(可能时间会很久,因为驱动可能不正常,很久才响应)。


09
2014
01

开发网站后得出的asp.Net网站优化总结

asp.Net网站优化总结: