socket包括ip位址和埠號兩部分,程式通過socket來通訊,socket相當於作業系統的乙個元件。
socket作為程序之間通訊機制,通常也稱作」套接字」,用於描述ip位址和埠號,是乙個通訊鏈的控制代碼。
注意:socket不僅可以在兩台電腦之間通訊,還可以在同一臺電腦上的兩個程式間通訊。
socket分類socket主要有兩種型別:
流式socket
是一種面向連線的socket,針對於面向連線的tcp服務應用,安全,但是效率低
資料報式socket
是一種無連線的socket,對應於無連線的udp服務應用,不安全,但效率高
socket一般應用模式(伺服器端和客戶端)
伺服器端的socket(至少需要兩個)
01.乙個負責接收客戶端連線請求(但不負責與客戶端通訊)
02.每成功接收到客戶端的連線便在伺服器端產生乙個對應的複雜通訊的socket
021.在接收到客戶端連線時建立
022為每個連線成功的客戶端請求在伺服器端都建立乙個對應的socket(負責和客戶端通訊)
socket的通訊過程
客戶端:
01,申請乙個socket
02,連線伺服器(指明ip位址和埠號)
伺服器端接收到連線請求後,產生乙個新的socket(埠大於1024)與客戶端建立連線並進行通訊,原監聽socket繼續監聽。
注意:負責通訊的socket不能無限建立,建立的數量和作業系統有關。
伺服器端:
01,申請乙個socket
02,繫結到乙個ip位址和乙個埠上
03,開啟偵聽,等待接收連線
socket常用類和方法
方法:
socket():建立乙個socket
bind():繫結乙個本地的ip和埠號(ipendpoint)
listen():讓socket偵聽傳入的連線吃那個病,並指定偵聽佇列容量
connect():初始化與另乙個socket的連線
accept():接收連線並返回乙個新的socket
send():輸出資料到socket
receive():從socket中讀取資料
close():關閉socket,銷毀連線
部分核心**:
//建立socket
//ip位址
ipaddress ip = ipaddress.
parse
(iptext.text)
;//埠號
ipendpoint point =
newipendpoint
(ip,
int.
parse
(porttext.text));
//建立監聽用的socket,流資料和tcp協議.
socket socket =
newsocket
(addressfamily.internetwork, sockettype.stream, protocoltype.tcp)
;try
catch
(exception ex)
void
acceptinfo
(object o)
catch
(exception ex)}}
//接收資訊
//定義byte陣列存放客戶端接收過來的資料
byte
buffer =
newbyte
[1024
*1024];
int len = client.
receive
(buffer)
;//位元組轉字串.
string words = encoding.utf8.
getstring
(buffer,
0, len)
; == clientip true
showmsg
(client.remoteendpoint.
tostring()
+":"
+ words)
;//顯示在控制項上的.
部分核心**:
socketsend =
newsocket
(addressfamily.internetwork, sockettype.stream, protocoltype.tcp)
;ipaddress ip = ipaddress.
parse
(this
.textip.text.
trim()
);//獲取ip位址.
socketsend.
connect
(ip, convert.
toint32
(this
.textport.text.
trim()
));//建立連線.
showmsg
("連線成功");
showmsg
("伺服器"
+ socketsend.remoteendpoint.
tostring()
);showmsg
("客戶端"
+ socketsend.localendpoint.
tostring()
);thread th =
newthread
(receivemsg)
;//寫法類似runnable.
th.start()
;//開啟執行緒
private
void
receivemsg()
catch
(exception ex)}}
//傳送訊息
//傳送訊息.
showmsg
(txtmsg.text)
;byte
buffer = encoding.utf8.
getbytes
(txtmsg.text)
; socketsend.
send
(buffer)
;//傳送訊息,以流的形式.
void
showmsg
(string msg)
1.建立乙個執行緒用來接收從服務端傳送來的訊息.
2.每當伺服器監聽到乙個新的客戶端連線時,建立乙個socket來與之對應,即建立乙個新的埠號來與客戶端保持連線,然後使用字典的形式,將客戶端的埠號儲存起來,方便下次傳送訊息.
3.該程式使用流式socket,資料傳送和接收都是以資料流的形式進行。
原始碼上傳到github中
使用C 開發Socket通訊
下面的示例顯示如何使用 socket 類向 http 伺服器傳送資料和接收響應。c public string dosocketget string server sends the get text to the host.s.send byteget,byteget.length,socketf...
socket通訊基本使用
socket通訊基於tcp和udp tcp和udp的區別 1.tcp是面向連線的,udp是無連線的,tcp提供可靠的服務,也就是說,通過tcp連線傳輸的資料不會丟失,沒有重複,並且按順序到達,udp沒有可靠性。2 tcp是面向位元組流的,實際上是tcp把資料看成一連串無結構的位元組流 udp是面向報...
C 實現Socket通訊
using system using system.collections.generic using system.linq using system.text using system.net using system.net.sockets class program static socke...