建立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連線請求 接受客...