Socket多執行緒程式設計委託控制項的奇怪問題

2022-02-02 00:14:32 字數 1986 閱讀 3034

問題:

首先設定簡單的服務端監聽

1delegate

void

settextevent(control ctl, 

string

text);

2void

settextline(control ctl, 

string

text)3);

6else

7ctl.text 

=text 

+environment.newline 

+ctl.text; 8}

thread thread = new thread(doactions);

thread.isbackground = true;

thread.start();

1void

doactions()211

catch

(exception ex)

1213

settextline(logctl, 

"繫結成功!");

14bool

done 

=true;15

while

(done)

1632

catch

(exception ex)

3338}39

}40}奇怪的問題就出現在這裡。settextline(msgctl, receivedstr);根本無法達到 ctl.text =

text 

+environment.newline 

+ctl.text; 這個目的,效果變成了

ctl.text  = text的效果。而其他地方都是可以的。偏偏,如果把receivedstr這個字元設定為固定值,比如把receivedstr =

receivedstr.trim();改成

receivedstr = datetime.now.tostring();那麼,就是ctl.text=

text 

+environment.newline 

+ctl.text; 的效果。而從int

size 

=client.receive(b);得出的byte陣列讀出卻出現問題,真是太奇怪了。還望知道的朋友能告知!困擾了我好久的問題!

下面是我的笨蛋解決方案,用的不是很爽。

解決方法:

設定兩個處理方法。

void

doactions()

catch

(exception ex)

settextline(logctl, 

"繫結成功!");

bool

done 

=true

;while

(done)

catch

(exception ex)}}

}delegate

void

settextevent(control ctl, 

string

text);

void

settext(control ctl, 

string

text)

);else

ctl.text 

+=text; 

}void

settextline(control ctl, 

string

text)

);else

ctl.text 

=text 

+environment.newline 

+ctl.text; 

}在receive後為什麼要用

settext(msgctl, receivedstr);

settext(msgctl, environment.newline);

進行換行並且無法ctl.text =

text 

+environment.newline 

+

vc 多執行緒程式設計 SOCKET通訊

vc 多執行緒程式設計 socket通訊 include stdafx.h include 伺服器端程式 dword winapi answerthread lpvoid lparam int main sockaddr in service service.sin family af inet s...

Socket 多執行緒

服務端 include include pragma comment lib,ws2 32 include void sendfuction socket sockconn void recvfunction socket sockclient void main if lobyte wsadata...

C 中Socket多執行緒程式設計例項

要通過網際網路進行通訊,你至少需要一對套接字,其中乙個執行於客戶機端,我們稱之為clientsocket,另乙個執行於伺服器端,我們稱之為serversocket。根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟 伺服器監聽,客戶端請求,連線確認。所謂伺服器監聽,是...