C Socket多執行緒程式設計(一)

2021-07-09 04:10:54 字數 4296 閱讀 5283

**:

[csharp]view plain

copy

//實現伺服器端

//建立client類

using

system;  

using

system.collections.generic;  

using

system.linq;  

using

system.text;  

namespace

chartserver  

#endregion

#region 方法

//重寫tostring方法

public

override

string

tostring()  

#endregion

#region 屬性

public

system.threading.thread clthread  

set}  

public

system.net.endpoint host  

set}  

public

string

name  

set}  

public

system.net.sockets.socket sock  

set}  

#endregion

}  }  

//伺服器端**

using

system;  

using

system.collections.generic;  

using

system.componentmodel;  

using

system.data;  

using

system.drawing;  

using

system.linq;  

using

system.text;  

using

system.windows.forms;  

namespace

chartserver  

//客戶端連線

system.net.sockets.socket clientsocket;  

//連線集合

system.collections.arraylist clients;  

//客戶端執行緒

system.threading.thread clientservice;  

system.threading.thread threadlisten;  

system.net.sockets.tcplistener listener;  

system.net.ipaddress ipaddress;  

int32 listenport;  

public

delegate

void

myinvoke(

string

str);  

/// 

/// 開始偵聽,允許客戶端連線

/// 

private

void

startlistening()  

catch

(exception e)  

}  }  private

void

serviceclient()  

);  

//輸出到控制台

console.writeline(clientcommand);  

//conn:表示新建連線。傳送格式:conn|傳送者名稱

if(tokens[0] == 

"conn"

)    

//獲取新新增連線的網路位址

system.net.endpoint ep = client.remoteendpoint;  

//新建乙個客戶端連線,儲存連線資訊

client c = new

client(tokens[1], ep, clientservice, client);  

//將新連線新增到集合中

clients.add(c);  

//建立資訊

string

message = 

"list|"

+ getchatterlist() + 

"/r/n"

;  //將連線集合傳送給新連線。

sendtoclient(c, message);  

//建立執行緒 將新連線新增到當前連線集合中,使用匿名委託呼叫新增方法

system.threading.thread handlercontrol = new

system.threading.thread(

delegate

() );  

//啟動執行緒

handlercontrol.start();  

}  //chat:傳送全域性訊息,所有其他連線都可以接收到。傳送格式:chat|傳送者名稱|資訊內容

if(tokens[0] == 

"chat"

)    

}  //priv:傳送私聊資訊。傳送格式:priv|傳送者名稱|資訊內容|接受者名稱

if(tokens[0] == 

"priv"

)    

}  //gone 退出。傳送格式:gone|傳送者名稱

if(tokens[0] == 

"gone"

)    

}  //連線存在

if(found)  

);  

//啟動執行緒

t.start();  

//從集合中刪除連線

clients.removeat(remove);  

//改變存活狀態

keepalive = false

;  }  

}  }  

catch

(exception e)  

}  }  /// 

/// 獲取當前連線集合

/// 

/// 

private

string

getchatterlist()  

return

result;  

}  /// 

/// 傳送資訊到客戶端

/// 

/// 客戶端連線

/// 要傳送的資訊

private

void

sendtoclient(client cl, 

string

clientcommand)  

}  /// 

/// 載入窗體類

/// 

/// 

/// 

private

void

servermain_load(

object

sender, eventargs e)  

/// 

/// 監聽按鈕

/// 

/// 

/// 

private

void

btnstartlistening_click(

object

sender, eventargs e)  

);  

//啟動執行緒

handlercontrol.start();  

}  /// 

/// 設定連線文字

/// 

/// 

private

void

settext(

string

s)  

);  

}  else

}  private

void

handlerlistbox(

string

c, string

o)  

);  

}  }  

/// 

/// 在當前連線列表中刪除乙個連線

/// 

/// 

private

void

delitem(

string

c)  

/// 

/// 在當前連線列表中新建乙個連線

/// 

/// 

private

void

additem(

string

c)  

}  }  

多執行緒程式設計(一)

程式 完成特定功能的一系列指令的集合 c 源程式 經過編譯鏈結後生成可執行檔案,可執行檔案稱為程式,它包含 段和資料段。儲存在磁碟上 程序 程式的一次動態執行過程,強調動態性,它包括 段 資料段 堆疊段 pcb 乙個程序只能對應乙個程式,乙個程式可以對應對個程序 執行緒 在乙個程式裡的乙個執行線路就...

多執行緒程式設計(一)

引用標頭檔案thread 建立執行緒 thread mythread 多執行緒函式 阻塞主線程直到子執行緒執行完畢 mythread.join 分離主線程和子執行緒,使得主線程和子執行緒可以同步執行下去 一旦分離後,就無法再使執行緒join 主線程結束後子執行緒也結束 mythread.detach...

C Socket 同步 多執行緒 聊天室

多執行緒,沒有自己寫執行緒池,是使用系統執行緒池來管理的 demo寫的比較亂 server using system using system.collections.generic using system.text using system.net using system.net.socket...