socket 客戶端和服務端通訊

2022-06-06 10:45:08 字數 4189 閱讀 4780

客戶端要連線伺服器:首先要知道伺服器的ip位址。而伺服器裡有很多的應用程式,每乙個應用程式對應乙個埠號 所以客戶端想要與伺服器中的某個應用程式進行通訊就必須要知道那個應用程式的所在伺服器的ip位址,及應用程式所對應的埠號

首先建立乙個解決方案,在解決方案下建立乙個「socket通訊」windows窗體應用程式的的專案,用作服務端,然後再在解決方案下建立乙個「socket客戶端」windows窗體應用程式的專案 用作客戶端

namespace socket通訊 

private void btnstart_click(object sender, eventargs e) 

catch   } 

//將遠端連線的客戶端的ip位址和socket存入集合中 

dictionary dic = new dictionary(); 

///

/// 等待客戶端連線,如果監控到有客戶端連線進來就建立乙個與之通訊的socket   

///

///

socket socketsend;  // 定義乙個負責通訊的socket 

void listen(object o) //這裡為什麼不直接傳遞socket型別的引數呢? 原因是:被執行緒執行的方法如果有引數的話,引數必須是object型別   

catch   } 

} ///

/// 服務端不停的接收客戶端傳送過來的訊息   

///

///

void getdata(object o) 

//將buffer這個位元組陣列裡面的資料按照utf8的編碼,解碼成我們能夠讀懂的的string型別,因為buffer這個陣列的實際儲存資料的長度是r個 ,所以從索引為0的位元組開始解碼,總共解碼r個位元組長度。   

string str = encoding.utf8.getstring(buffer, 0, r); 

showmsg(socketsend.remoteendpoint.tostring() + ":" + str); 

} catch   } 

} private void showmsg(string str) 

///

/// 伺服器給客戶端傳送訊息 

///

///

///

private void btnsend_click(object sender, eventargs e) 

//伺服器要想給客戶端發訊息,就需要先拿到負責通訊的那個socket 

string str = txtmes.text.trim(); 

byte buffer = system.text.encoding.utf8.getbytes(str); 

string getip = combobox1.selecteditem as string; //combobox儲存的是客戶端的(ip+埠號) 

socketsend = dic[getip] as socket; //根據這個(ip及埠號)去dic鍵值對中找對應 賦值與客戶端通訊的socket【每個客戶端都有乙個負責與之通訊的socket】   

namespace socket客戶端 

socket socketsend; 

private void btnstart_click(object sender, eventargs e) 

catch   } 

void showmsg(string str) 

///

/// 客戶端不停的接收服務端傳送過來的訊息   

///

///

void getdata(object o) 

//將buffer這個位元組陣列裡面的資料按照utf8的編碼,解碼成我們能夠讀懂的的string型別,因為buffer這個陣列的實際儲存資料的長度是r個 ,所以從索引為0的位元組開始解碼,總共解碼r個位元組長度。   

string str = encoding.utf8.getstring(buffer, 0, r); 

//remoteendpoint方法是獲取伺服器的ip位址和埠號 

showmsg(socketsend.remoteendpoint.tostring() + ":" + str); 

} catch   } 

} ///

/// 客戶端給伺服器傳送訊息 

首先我們將服務端設定啟動項,然後啟動除錯,

然後我們在將滑鼠移動到「socket客戶端」 (客戶端)這個專案下,滑鼠右鍵專案名稱「socket客戶端」--》除錯--》啟動例項 就可以了。

開開啟始命令  cmd   telnet 10.18.16.46 5000    即telnet 伺服器ip位址  繫結的埠號

如果用命令,需要在 控制面板--》程式和功能--》開啟或關閉windows功能  將telnet 伺服器,和telnet客戶端打上鉤

注釋一下:

//建立乙個用來監聽的socket物件(引數1:表示採用ipv4,引數2:表示使用資料流來傳輸資料,而不是資料報引數3:表示採用tcp協議)

socketskconn =newsocket(addressfamily.internetwork,sockettype.stream,protocoltype.tcp);

//建立ip和監聽埠(引數1:ip位址 引數2:埠號是9999)

ipendpointendpoint=newipendpoint(ipaddress.parse("192.168.253.3"),9999);

PHP編寫socket客戶端和服務端

確保在連線客戶端時不會超時 set time limit 0 ip 127.0.0.1 port 13370 function doencoding str return str socket通訊整個過程 socket create socket bind socket listen socket ...

socket(C )客戶端和服務端

define winsock deprecated no warnings include include define port 5150 define msgsize 1024 pragma comment lib,ws2 32.lib void main system pause includ...

socket 客戶端和服務端bind的區別

socket bind在客戶端和伺服器端使用的區別 cuishumao的專欄 csdn部落格 socket 客戶端也可以使用 bind blacknight168的部落格 csdn部落格 1 bind埠 由程序選擇乙個埠去連伺服器,如果預設情況下,呼叫bind函式時,核心指定的埠是同乙個,那麼呼叫多...