完整的TCP通訊包實現

2021-03-31 13:11:00 字數 3728 閱讀 9056

using system;

namespace jh.sockets

///

/// 執行緒狀態引數

///

class parm

public parm(jhthreadstatus nstatus,object obj)

jhthreadstatus status;

object objparm;

///

/// 上下文物件

///

public object objparm

set}

///

/// 控制狀態

///

public jhthreadstatus status

set}

}///

/// 通訊資料處理介面

///

public inte***ce  iobserver //

// 上乙個觀察者

//iobserver prev //

// 新增觀察者到後面,如果已經存在鍊錶中則不做任何操作

//void add(iobserver observer); //

// 插入觀察者到下乙個觀察者的前面

//void insert(iobserver observer);

//刪除觀察者

void remove(iobserver observer);

//是否存在鍊錶中

bool i***ist(iobserver observer);

}///

/// 通訊資料處理類的基類,只能派生

///

public abstract class  observer : iobserver

return ;}

///

/// 資料處理過載方法.

///

/// tcpclient類 例項

/// 記憶體資料流

/// 處理結果,如果不希望後面的處理者繼續處理資料,則返回false,否則返回true;

public virtual bool ondeal(***mdata cd)

//附加的自身初始化操作

public virtual bool init()

//提前初始化介面

public virtual bool beforeinit()

//初始化後處理介面

public virtual bool afterinit()

//刪除前處理介面

public virtual bool beforeexit()

//下乙個觀察者

iobserver next = null;

public iobserver next

set}

//上乙個觀察者

iobserver prev = null;

public iobserver prev

set}

//新增觀察者

public void add(iobserver observer)

else next.add(observer);//加到後面

}///

/// 插入觀察者到下乙個觀察者的前面

///

///

public void insert(iobserver observer)

///

/// 刪除觀察者

///

///

public void remove(iobserver observer)

else

}///

/// 查詢是否存在

///

///

///

public bool i***ist(iobserver observer)}

///

/// 日誌處理基類,本身從通訊資料處理類的基類派生。

///

class   log : observer

public log(string slogfile)

~log()

// 日誌檔案帶路徑名稱

private string logfile;

public string logfile

set}}

}using system;

using system.collections;

using system.io;

using system.threading;

namespace jh.sockets

constructed",id);

}thread t = null;

public void start()

started",id);}}

public void stop()}

}///

/// 析構方法

///

~***mdatamgr()

unconstructed",id);

}public void datanotiyfythread()

工作中",id);}}

catch(exception e)

finally

console.writeline("jh data distributing thread of jh data distributor exited",id);}}

parm dnflag = null;

arraylist adata = new arraylist();

innerobserver root = new innerobserver();

///

/// 觀察者根節點類 定義

///

internal class innerobserver : observer

public void dealdata()

removeat(0);}}

}///

/// 未處理資料個數

///

public int datacount

}///

/// 根據索引返回未處理資料

///

internal ***mdata this[int index]

}///

/// 根據索引刪除資料

///

/// 索引

public void removeat(int index)}}

///

/// 接收到新的資料提交

///

/// 客戶端連線

/// 資料流

public void adddata(jhclient client,memorystream s,int len)

}///

/// 新增觀察者

///

///

public void add(iobserver observer)

}///

/// 刪除觀察者

///

///

public void remove(iobserver observer)

}///

/// 在最前面插入觀察者

///

///

public void insert(iobserver observer)

}// 取觀察者個數

//  int getobservercount()

//  }

TCP通訊C 實現

tcp客戶端與伺服器端通訊模型 伺服器端實現 include include pragma comment lib,ws2 32 using namespace std void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 ...

socket實現TCP通訊

tcp是一種可靠的,面向連線的協議。在socket中,建立tcp連線的過程大致如下 伺服器端 1.初始化套接字 2.建立伺服器socket 3.將本機位址與伺服器socket繫結在一起 4.伺服器開始監聽 5.伺服器確認請求 確認之前時一種阻塞的狀態 accept 函式生成乙個新的socket。6....

C 實現TCP通訊

服務端 include initsock.h include include include include using namespace std cinitsock initsock 初始化winsock庫 sockaddr in serveraddr sockaddr in remoteadd...