MUD遊戲程式設計 建立TCP監聽套接字

2021-07-01 21:29:58 字數 1876 閱讀 7665

建立tcp監聽套接字

1、建立套接字

int sock = socket( af_inet, sock_stream, ipproto_tcp );

第乙個引數是位址族(address family)。

第二個引數是套接字型別。sock_stream表示tcp套接字。udp使用sock_dgram。

第三個引數是協議。sock_stream流行協議是ipproto_tcp。sock_dgram協議是ipproto_udp和ipproto_icmp。

如果函式執行失敗返回-1,執行成功則返回套接字描述符。

接下來將套接字繫結到乙個埠號。

函式定義:

第乙個引數是socket函式建立的套接字描述符。

第二個引數是sockaddr結構,描述了有關套接字所有型別的特性,其中最重要的是埠號。

第三個引數是sockaddr結構的大小。

新的sockaddr結構定義如下:

第乙個引數是套接字正在使用的位址族,它幾乎總是af_inet。

第二個引數是將要開啟的埠號。

第三個引數是ip位址。埠和位址都應該遵循網路位元組順序。

第四個引數知識為了將結構填充到16位元組。

對sockaddr_in結構體進行填充:

struct sockaddr_in socketaddress;                     // create struct

socketaddress.sin_family = af_inet;                   // set it for internet

socketaddress.sin_port = htons( 1000 );               // use port 1000

socketaddress.sin_addr.s_addr = htonl( inaddr_any );  // bind to any address

memset( &(socketaddress.sin_zero), 0, 8 );            // clear padding

socket api為我們提供了乙個函式,可以很方便地將字串格式的ip位址轉換為遵循網路位元組順序整數。

socketaddress.sin_addr.s_addr =inet_addr("127.0.0.1" );

bind( sock, (structsockaddr*)&socketaddress, sizeof(struct sockaddr));

backlog引數是告訴套接字佇列中的連線數達到多少時就開始拒絕這些連線。

下面是呼叫的乙個例項:

listen( sock, 16 );

函式原型:

sockaddr結構體由函式來填充,表明是誰正在與我們連線。

addrlen指標包含addr結構的長度。

下面給出如何接受這一函式:

int datasock;

struct sockaddr_in socketaddress;

socklen_t sa_size = sizeof( struct sockaddr_in );

datasock = accept( sock, &socketaddress, &sa_size );

TCP套介面程式設計 Socket

tcp套介面程式設計 socket socket起源於unix,而unix linux基本哲學之一就是 一切皆檔案 都可以用 開啟open 讀寫write read 關閉close 模式來操作。我的理解就是socket就是該模式的乙個實現,socket即是一種特殊的檔案,一些socket函式就是對其...

基本TCP套介面的程式設計流程

要實現客戶端和伺服器端的通訊,則需要客戶端和伺服器端共同完成。其中,tcp伺服器和客戶端的程式設計流程如圖所示 首先由伺服器端建立socket,然後bind繫結通訊埠,建立listen監聽佇列。之後便開始了通訊的過程。此時伺服器阻塞在accept這裡,直到tcp客戶端主動進行connect進行三次握...

TCP 協議的理解及套介面程式設計

1.編寫服務端與客戶端程式 1 基本通訊程式設計 客戶端要求 指定客戶端的ip位址和埠號 與服務端建立tcp連線 請求讀取檔案a 全部小寫字母,多行 並將a檔案傳送給伺服器端 顯示本地和異地協議位址資訊 服務端要求 指定伺服器端埠號,使用通配ip位址,監聽tcp埠 處理客戶端的tcp連線請求 接受客...