乙個socket原始碼

2021-05-21 22:01:43 字數 2496 閱讀 1716

vc編寫伺服器**式的聊天室

2009-9-11  本文參考了 visual c++6.0完全自學手冊 中的示例

一 流程說明

客戶端客戶端建立流式套接字

呼叫connection向伺服器傳送連線請求

連線成功後使用建立與之關聯的的csocketfile物件和carchive物件

使用carchive物件在客戶端和伺服器之間傳送資料

結束之後釋放csocketfile物件,carchive物件,csocket物件

服務端服務端建立流式套接字

開始監聽連線請求

有連線請求呼叫accpet函式接受請求,並建立乙個新的客戶端套接字。

連線成功後使用建立與之關聯的的csocketfile物件和carchive物件

使用carchive物件在客戶端和伺服器之間傳送資料。

服務端接受到某乙個客戶端傳送過來的資料之後,將資料傳送到連線到該伺服器的各個客戶端

結束之後釋放csocketfile物件,carchive物件,csocket物件

二 過載函式說明

客戶端clientsocket需要過載virtual void onreceive(int nerrorcode);和virtual void onclose(int nerrorcode);函式

服務端需要過載virtual void onaccept(int nerrorcode);函式

三 實現

1訊息文字序列化操作類

標頭檔案msg.h

class cmsg : public cobject 

;實現檔案msg.cpp

#include "stdafx.h"

#include "msg.h"

cmsg::cmsg()

cmsg::~cmsg()

void cmsg::serialize(carchive &ar)

2 客戶端socket類

標頭檔案clientsocket.h

#include "stdafx.h"

#include   "afxsock.h"

class cmsg;

class cclientsocket : public csocket

;實現檔案clientsocket.cpp

#include "stdafx.h"

#include "clientsocket.h"

#include "msg.h"

cclientsocket::cclientsocket()

cclientsocket::~cclientsocket()

void cclientsocket::init()

while (!m_parchivein->isbufferempty());

csocket::onreceive(nerrorcode);

}void cclientsocket::sendmsg(cmsg * pmsg)

}void cclientsocket::sendmsg(cmsg * pmsg)

}void cclientsocket::onclose(int nerrorcode)

3伺服器不僅要包括客戶端socket,序列化資料還需要乙個監聽socket

標頭檔案serversocket.h

#pragma once

#include "stdafx.h"

#include "afxsock.h"

class cserverdlg;

class cserversocket : public csocket

;實現檔案serversocket.cpp

#include "stdafx.h"

#include "serversocket.h"

#include "clientsocket.h"

#include "afxsock.h"

#include "msg.h"

cserversocket::cserversocket()

cserversocket::~cserversocket()

void cserversocket::init(uint port)

void cserversocket::onaccept(int nerrorcode)

在onaccept處理函式中將訊息傳送到各個客戶端

cptrlist m_plconn; //鍊錶類儲存接受的客戶端socket

cserversocket  m_listensocket;

cclientsocket * psocket = new cclientsocket();// 新建客戶端套接字

if (m_listensocket.accept(*psocket))// 接受連線請求

psocket->init();/ 新客戶端套接字初始化

m_plconn.addtail(psocket);// 新增到已連線套接字列表中

}else

}以上程式已經在visual c++2005  中除錯通過

乙個socket原始碼

vc編寫伺服器 式的聊天室 2009 9 11 本文參考了 visual c 6.0完全自學手冊 中的示例 一 流程說明 客戶端客戶端建立流式套接字 呼叫connection向伺服器傳送連線請求 連線成功後使用建立與之關聯的的csocketfile物件和carchive物件 使用carchive物件...

乙個簡單的殼原始碼

最近出差,偶有閒暇,寫了個簡單的殼,先宣告下,此殼部分內容借鑑看雪論壇某位大俠 現在搜尋找不到了,所以名字忘記了 名為shell的程式。主要實現有以個方面的功能 1,對text塊進行rc4加密,組織程式被ida等靜態工具分析。2,替換程式中的部分api函式,讓其執行到api函式時能跳到殼執行相關 後...

乙個簡單的殼原始碼

最近出差,偶有閒暇,寫了個簡單的殼,先宣告下,此殼部分內容借鑑看雪論壇某位大俠 現在搜尋找不到了,所以名字忘記了 名為shell的程式。主要實現有以個方面的功能 1,對text塊進行rc4加密,組織程式被ida等靜態工具分析。2,替換程式中的部分api函式,讓其執行到api函式時能跳到殼執行相關 後...