基於TCP的Socket通訊

2021-09-27 08:16:23 字數 1611 閱讀 7244

在win32平台上的winsock程式設計都要經過下列步驟:

定義變數->獲得windock版本->載入winsock庫->初始化->建立套接字->設定套接字選項->關閉套接字->解除安裝winsock庫->釋放資源

1、建立乙個socket,用函式socket()

int socket(int domain, int type, int protocol);
其中 「int domain」引數表示套接字要使用的協議簇,協議簇的在「linux/socket.h」裡有詳細定義,常用的協議簇:

af_unix(本機通訊)

af_inet(tcp/ip – ipv4)

af_inet6(tcp/ip – ipv6)

其中 「type」引數指的是套接字型別,常用的型別有:

sock_stream(tcp流)

sock_dgram(udp資料報)

sock_raw(原始套接字)

最後乙個 「protocol」一般設定為「0」,也就是當確定套接字使用的協議簇和型別時,這個引數的值就為0,但是有時候建立原始套接字時,並不知道要使用的協議簇和型別,也就是domain引數未知情況下,這時protocol這個引數就起作用了,它可以確定協議的種類。

socket是乙個函式,那麼它也有返回值,當套接字建立成功時,返回套接字,失敗返回「-1」,錯誤**則寫入「errno」中。

2、繫結ip和埠等資訊到socket上,bind()

3、設定允許的最大連線數,listen()

4、接收客戶端上的請求,accept()

5、收發資料,send() recv()或read() write()

6、關閉網路連線,close()

#define _winsock_deprecated_no_warnings

#include#include#include#pragma comment(lib,"ws2_32.lib")

const int buf_size = 1024;

int main()

1、建立乙個socket,用函式socket()

2、設定要連線的對方的ip位址和埠等屬性

3、連線伺服器,connect()

4、收發資料,send() recv()或read() write()

5、關閉網路連線,close()

#define _winsock_deprecated_no_warnings

#include#include#include#includeusing namespace std;

#pragma comment(lib,"ws2_32.lib")

const int buf_size = 100;

int main()

; recv(sock, infobuff, maxbyte, null);

cout << "從伺服器接受到得資訊為:" << infobuff << endl;

closesocket(sock);

wsacleanup();

system("pause");

return 0;

}

基於tcp的socket通訊

socekt是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它 把複雜的tcp ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議 socket 基於檔案型別的套接字家...

基於TCP協議的socket通訊

一 伺服器端 1 建立serversocket,即伺服器端的socket,繫結指定的埠,並偵聽此埠 serversocket server new serversocket 8888 2 呼叫accept 方法,開始偵聽,等待客戶端的連線,在未連線成功之前,處於阻塞狀態,返回的socket,用於與客...

基於tcp和udp的socket通訊

做個小遊戲的project用到了socket程式設計,於是,就在網上查閱了一下資料,下面簡單總結一下。1.什麼是socket socket是在應用層與傳輸層之間的乙個抽象層,它把tcp ip層複雜的操作抽象為幾個介面 用層的程序實現網路通訊,使得不同主機的相關程序之間交換資料。2.什麼是tcp和ud...