一.什麼是socket?
網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為乙個socket。建立網路通訊連線至少要一對埠號(socket)。socket本質是程式設計介面(api),對tcp/ip的封裝,tcp/ip也要提供可供程式設計師做網路開發所用的介面,這就是socket程式設計介面;http是轎車,提供了封裝或者顯示資料的具體形式;socket是發動機,提供了網路通訊的能力。
用於描述ip位址和埠,是乙個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。
鏈結過程:
根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟:伺服器監聽,客戶端請求,連線確認。
(1)伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。
(2)客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的位址和埠號,然後就向伺服器端套接字提出連線請求。
(3)連線確認:是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端套接字的請求,建立乙個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連線就建立好了。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。
二.socket套接字的資料結構
套接字型別:
1.流式套接字(tcp);
2.資料報套接字(udp);
3.原始套接字(ip):用於直接訪問協議的較低底層;
套接字型別區別:
建立流式套接字:
建立資料報套接字:
socket s = new socket(addressfamily.internetwork, sockettype.dgram, protocoltype.udp);
三.**示例
1.server端
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.net.sockets;
using system.net;
using system.threading;
namespace socket_server
成功!", serversocket.localendpoint.tostring());
//通過client_socket傳送資料
thread mythread = new thread(listenclientconnect); //建立乙個新的執行緒,並用於監聽客戶端鏈結
mythread.start();
console.readline();
}//監聽客戶端鏈結
private
static
void
listenclientconnect()
}//接收訊息
private
static
void
receivemessage(object clientsocket)
訊息.", myclientsocket.remoteendpoint.tostring(), encoding.ascii.getstring(result, 0, receivenumber));
}catch (exception ex)}}
}}
client端
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.net;
using system.net.sockets;
using system.threading;
namespace
socket_client
catch
//通過clientsocket接收資料
int receivelength = clientsocket.receive(result);
console.writeline("接受伺服器訊息:.",encoding.ascii.getstring(result, 0, receivelength));
//通過clientsocket傳送資料
for (int i = 0; i < 10; i++)
.", sendmessage);
}catch
}console.writeline("傳送完畢,按回車鍵退出.");
console.readkey();}}
}
windows程式設計之socket套接字2
網路授時服務,同步本機時間,主要 include stdafx.h include include include include resource.h include maindlg.h define hightime 21968699 21968708 jan 1,1900 filetime.h...
網路程式設計 Socket 套接字
網路程式設計 目前較為流行的網路程式設計模型是客戶機 伺服器 c s 結構。即通訊雙方一方作為服務 器等待客戶提出請求並予以響應。客戶則在需要服務時向伺服器提出申請。伺服器一般作為 守護程序始終執行,監聽網路埠,一旦有客戶請求,就會啟動乙個服務程序來響應該客 戶,同時自己繼續監聽服務埠,使後來的客戶...
socket套接字程式設計函式
呼叫socket函式建立套接字 呼叫bind函式分配ip位址和埠 呼叫listen函式轉為可接收請求狀態 呼叫accept函式受理連線請求 include 成功時返回檔案描述符,失敗時返回 1 int socket int domain,int type,int protocol 協議族 proto...