|
这只是一个小小的实例,包括Socket编程、多线程、文件操作。
简单介绍:他实现了点对点聊天,一个服务器,一个客户端,主线程用来发送数据,启动一个子线程用来接收数据,服务器记录聊天内容。他只是用上了上面所说的三个技术,如果你对上面三个技术不是很熟,或许对你有点帮助,如果你很熟,既然来了希望你能指导一下我,如果你是高手希望你能指导一下我的编码问题。我太渴望写出高效简洁的代码。
废话就少说了,程序里处处都是注释,你可以选择看看我的代码,或是选择直接运行看看,《源码下载》。
服务器代码:
// Server.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <windows.h>
#include <process.h>
#include <iostream>
#include "FileLog.h"
#include "time.h"
usingnamespace std;
#pragma comment(lib,"ws2_32.lib")
//多线程调用的方法只有一个指针型的参数,有时候需要多个参数,所以定义一个结构,参数作为结构的字段
typedef struct _receiveStruct
{
SOCKET *Socket;
FileLog *fileLog;
_receiveStruct(SOCKET *_socket,FileLog *_fileLog):Socket(_socket),fileLog(_fileLog){}
} ReceiveStruct;
//获取今天日期的字符串
string GetDate(constchar*format)
{
time_t tm;
struct tm *now;
char timebuf[20];
time(&tm);
now=localtime(&tm);
strftime(timebuf,sizeof(timebuf)/sizeof(char),format,now);
returnstring(timebuf);
}
//接收数据线程
void receive(PVOID param)
{
ReceiveStruct* receiveStruct=(ReceiveStruct*)param;
char buf[2048];
int bytes;
while(1)
{
//接收数据
if((bytes=recv(*receiveStruct->Socket,buf,sizeof(buf),0))==SOCKET_ERROR){
cout<<"接收数据失败!n";
_endthread();//终止当前线程
}
buf[bytes]='