封裝好的socket,拿去用

2022-02-10 20:50:41 字數 3431 閱讀 6431

年終有空咯,分享一下自己封裝的socket類庫. 由於公司寫的socket**非常醉人,我不能忍,所以自己封裝了一下方便大家使用,現在有空也分享給園友用用看,現在還存在一定的問題,等下我列出來,希望大家能幫我出一些解決方案,完善這個東東.

直接開講,不廢話了,一共3塊,服務端,客戶端,websocket

一:服務端

serverlistener listener = new serverlistener();
1.建構函式:

2.事件:

//

日誌,內部的處理日誌,主要用來看流程,實際用處不大.

listener.log += listener_log; //

listener_log(string msg)

//客戶端上線

listener.clientconnected += listener_clientconnected; //

listener_clientconnected(baseclient t)

//客戶端下線

listener.clientdisconnect += listener_clientdisconnect; //

listener_clientdisconnect(baseclient t)

//接收到完整訊息

listener.msgread += listener_msgread; //

listener_msgread(baseclient t, byte t2)

說明:1.log中msg引數是執行流程的訊息,  2.t是當前客戶端物件,  3.t2完整訊息資料

3.方法:

//

呼叫start啟動監聽;

listener.start();

//停止監聽

listener.stop();

//廣播訊息,msg傳送的內容,

//type傳送到客戶端型別,傳null傳送到所有型別

//(目前只有socket和websocket2個型別)

listener.sendall(byte msg, clienttype?type)

//還有乙個屬性

二:客戶端

client client = new client();
1.建構函式:

2.事件

//

日誌client.log += client_log; //

client_log(baseclient t, string t2)

//斷開連線

client.clientdisconnect += client_clientdisconnect; //

client_clientdisconnect(baseclient t)

//連線伺服器成功

client.clientconnected += client_clientconnected; //

client_clientconnected(baseclient t,bool state,string msg)

//傳送完一條訊息

client.msgsend += client_msgsend; //

client_msgsend(baseclient t)

//接收到完整訊息

client.msgread += client_msgread; //

client_msgread(baseclient t, byte t2)

3.方法

//

啟動連線伺服器

client.start();

//斷開連線

client.stop();

//傳送資料

client.senddata(byte data)

4.屬性

///

///自動重連,預設false

///public

bool autochonglian

//////

id///

public guid id

//////

遠端網路位址

///public endpoint remoteip

//////

本地網路位址

///public endpoint localip

//////

客戶端型別

///public clienttype clienttype

//////

客戶端物件是否為空

///public

bool clientisnull

三:websocket

websocket已經在服務端封裝好了,直接連線就能通訊,這裡唯一要講一下的就是send的時候需要注意資料長度不能超過8184,超過分段發,

還是給一段js出來 大家自己看把

function

addmsg(msg)

var websocket = new websocket("ws://ip:port/");

websocket.onopen = function

onopen() ;

websocket.onclose = function

onclose() ;

websocket.onerror = function

onerror()

websocket.onmessage = function

onmessage(evt) ;

websocket.sendobj = function

(obj) ;

websocket.sendlen = 8184; //分段傳送資料長度不能超過8184

websocket.send = function

(msg)

} else

return

true

; }

else

};websocket.sendobj("傳送資料,一般是json字串,反正隨便你");

現在來說說還需要完整的地方

1.檔案傳輸還沒有做.

2.websocket 客戶端傳送大資料會有問題, 現在的情況  資料長度小於8184*5 不會有問題, 資料長度大於8184*10會頻繁出現伺服器接收資料異常問題,  這裡求大神幫忙看看!!!

還有個問題 迴圈傳送大量資料也會出現問題比如 for 20次 sendobj("1")

服務端傳送大資料到客戶端沒有問題

完事! 不介意騙點分吧 0.0

封裝好的函式

list2 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,...

用socket封裝ftp類。

最近本人寫了乙個ftp類,想和大家分享一下。ftp協議的底層實現是用socket來實現的。上圖是ftp協議的官方協議圖 可以看出它主要是由兩個socket組成的。1,控制連線,主要是用於傳送控制命令 ftp協議的建立流程 首先,客戶端建立乙個套接字1,套接字繫結的ip和埠為ftp伺服器的ip和著名埠...

封裝好的日誌模組

import logging import time import osfrom common.file path import logs path now time.strftime y m d time.localtime time.time log path os.path.join logs...