最簡單的聊天程式:採用udp實現。學習用,無實用價值。
注釋很詳細就不再說明了,監聽的時候使用死迴圈,注意用到了跨執行緒操作控制項、強制結束執行緒。
實用委託實現執行緒安全的方式操作控制項,等待執行緒結束。
using
system;
using
system.collections.generic;
using
system.componentmodel;
using
system.data;
using
system.drawing;
using
system.text;
using
system.windows.forms;
using
system.net;
using
system.net.sockets;
using
system.threading;
namespace
public
partial
class
form1 : form
private
void
textbox1_textchanged(
object
sender, eventargs e)
private
void
form1_load(
object
sender, eventargs e)
private
void
richtextbox2_textchanged(
object
sender, eventargs e)
thread th;
private
void
button1_click(
object
sender, eventargs e)
//儲存聊天記錄(因為沒有找到跨執行緒取控制項值的方法。)
static
string
messageinfo =""
;///
///傳送聊天記錄。
//////
聊天記錄
///發給對方的ip
///埠號。
void
sendmessage(
string
message,
string
toanyone,
intport)
//////
開始監聽
///void
serverstart()
}private
void
button2_click(
object
sender, eventargs e)
string
toanyone
=this
.textbox1.text;
intport
=int
.parse(
this
.textbox2.text);
sendmessage(
this
.richtextbox2.text,toanyone,port);
richtextbox2.text =""
;}//////
跨執行緒操作控制項
//////
delegate
void
settextcallback(
string
text);
private
void
settext(
string
text));}
else
}private
void
form1_formclosing(
object
sender, formclosingeventargs e)
private
void
richtextbox1_textchanged(
object
sender, eventargs e)}}
由於又要忙了,留下來做記錄。
區域網開發UDP
1.掛 asyncudpsocketdelegate 2.例項化 asyncudpsocket asyncudpsocket alloc init asyncudpsocket setdelegate self asyncudpsocket bindtoport 10250 error nil as...
區域網UDP丟包優化
之前一直沒考慮清楚為何接收到udp資料丟包的問題,當意識到這造成很大問題時便狂查資料,有以下結論 1.傳送方傳送的資料太快,導致udp輸入佇列溢位 系統會丟掉一些包 在應用程式看來是即是丟包。解決方法 1.想辦法提高應用程式對udp包的處理速度。2.提高udp輸入佇列緩衝區大小,可通過setsock...
WiFi Chat 通過網頁與區域網使用者聊天
就在剛才hacker news發起了一款即時通訊服務 wifi chat 的討論,這款基於網頁的工具能夠讓區域網使用者相互溝通。不用安裝任何軟體,通過瀏覽器即可完成。這讓我想到多年前流行的一款工具 飛鴿傳書 這是一款在windows下幫助區域網使用者即時溝通 傳輸檔案的一款客戶端軟體,無需任何設定 ...