**:
[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...