C 之Socket的簡單使用

2021-09-10 22:19:25 字數 2567 閱讀 1298

socket是一種通訊tcp/ip的通訊介面,也就是http的抽象層,就是socket在http之上,socket也就是發動機。實際上,傳輸層的tcp是基於網路層的ip協議的,而應用層的http協議又是基於傳輸層的tcp協議的,而socket本身不算是協議,就像上面所說,它只是提供了乙個針對tcp或者udp程式設計的介面。在c#中可以非常方便的使用socket進行資料傳輸。

public socket(addressfamily addressfamily, sockettype sockettype, protocoltype protocoltype);

我們想要使用socket,那麼就必須建立socket的物件,建立這個物件,就必須需要ipendpoint物件來繫結到套接詞字中,有如下定義

//

建立負責監聽的套接字,注意其中的引數;

socketwatch = new

socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);

//獲得文字框中的ip物件;

ipaddress address =ipaddress.parse(textbox1.text.trim());

//建立包含ip和埠號的網路節點物件;

ipendpoint endpoint = new ipendpoint(address, int.parse(textbox2.text.trim()));

然後再通過socket的bind來進行繫結。

socketwatch.bind(endpoint);

因為我們時刻會被內網中的其他ip和埠進行連線,那麼我們就需要建立執行緒來進行觀察,有如下定義

//

設定監聽佇列的長度;

socketwatch.listen(10

);

//建立負責監聽的執行緒;

threadwatch = new

thread(watchconnecting);

threadwatch.isbackground = true

; threadwatch.start();

showmsg(

"伺服器啟動監聽成功!

");

其檢測方法如下,其中就是不斷的去檢測客戶端的連線請求,通過accept()方法可以獲取乙個套接字,然後通過socket物件的remoteendpoint()可以獲取乙個ip。

void

watchconnecting()

}

最後我們開啟乙個執行緒去執行recmsg方法,然後我們不停的去監聽客戶端給我們的資料傳送。

void recmsg(object

sokconnectionparn)

catch

(socketexception se)

catch

(exception e)

if (arrmsgrec[0] == 0) //

表示接收到的是資料;

if (arrmsgrec[0] == 1) //

表示接收到的是檔案; }}

}}

我們在方法中獲得了乙個object型別的物件,將這個object物件轉換成了socket,然後我們通過socket的方法receive()方法接收返回的資料,其中裡面有它的屬性,可以獲取ip還有一些資料等等。伺服器向客戶端傳送資料也是非常簡單。通過send方法就可以了,如以下定義:

string strmsg = "

伺服器" + "

\r\n

" + "

-->

" + richtextbox1.text.trim() + "

\r\n";

byte arrmsg = system.text.encoding.utf8.getbytes(strmsg); //

將要傳送的字串轉換成utf-8位元組陣列;

byte arrsendmsg = new

byte[arrmsg.length + 1

]; arrsendmsg[

0] = 0; //

表示傳送的是訊息資料

buffer.blockcopy(arrmsg, 0, arrsendmsg, 1

, arrmsg.length);

string strkey = ""

; strkey =online.text.trim();

if (string.isnullorempty(strkey)) //

判斷是不是選擇了傳送的物件;

else

最後需要注意的是,如果你的檔案較大,有的時候這個緩衝區達不到你的檔案位元組那麼大,那麼就會截斷,所以與的時候,先將檔案轉換為byte是正確的做法。只要在客戶端進行逆轉就可以了!

posted @

2019-02-12 11:14

張子浩 閱讀(

...)

編輯收藏

C 中Socket的簡單使用

以前學過的socket,後來沒怎麼用過,就基本忘了,所以閒來時重新回顧學習一番.socket其實並不是乙個協議,而是為了方便使用tcp或udp而抽象出來的一層,是位於應用層和傳輸控制層之間的一組介面.當兩台主機通訊是,必須通過socket連線,socket則利用tcp ip協議建立tcp連線.tcp...

Socket的使用(簡單測試)

服務端 public class sockettest public sockettest int port public void startlisten catch exception ex 監聽客戶端連線 private void listenclientconnect catch excep...

SOCKET之 socketpair的使用

socketpair函式概要如下 include include int socketpair int domain,int type,int protocol,int sv 2 sys types.件需要用來定義一些c巨集常量。sys socket.件必須包含進來定義socketpair函式原型。...