TCP套接字詳解 C語言實現

2021-10-01 22:28:51 字數 2978 閱讀 8329

socket本意翻譯為插座,這其實很形象的解釋了套接字的作用,在客戶端與服務端的通訊中,套接字就起著像插座一樣連線的作用。

tcp套接字與udp套接字最大的區別便是是否面向連線,本文所實現的便是面向連線的tcp套接字,即客戶端與服務端在通訊之前進行三次握手建立連線。

申請套接字:s = socket(…);

建立套接字與端點關係(繫結):bind(s,address…);

設定為監聽模式:listen(s);

接收連線:newsock = accept(s);

資料收/發:recv(newsock); / send(newsock);

關閉套接字:closesocket(newsock);

申請套接字:s = socket(…);

建立套接字與端點關係(繫結):bind(s,c_address…);

確定伺服器端點:s_address = …;

與伺服器建立連線:connect(s,s_address…);

資料發/收:send(s); / recv(s);

關閉套接字:closesocket(s);

#include

#include

#include

#include

#include

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

intmain

(int argc,

char

* ar**)

//建立套接字

socket slisten =

socket

(af_inet, sock_stream, ipproto_tcp);if

(slisten == invalid_socket)

//繫結ip和埠

sockaddr_in sin;

sin.sin_family = af_inet;

sin.sin_port =

htons

(8888);

sin.sin_addr.s_un.s_addr = inaddr_any;if(

bind

(slisten,

(lpsockaddr)

& sin,

sizeof

(sin)

)== socket_error)

//開始監聽if(

listen

(slisten,5)

== socket_error)

//迴圈接收資料

socket sclient;

sockaddr_in remoteaddr;

int naddrlen =

sizeof

(remoteaddr)

;char revdata[

255]

;while

(true

)printf

("接受到乙個連線:%s \r\n"

,inet_ntoa

(remoteaddr.sin_addr));

srand((

unsigned

)time

(null))

;for

(int i =

0; i <=

20; i++

)//傳送資料

int randdata =

rand()

%500

; randdata =

abs(randdata)

;int my_senddata = my_revdata + randdata;

printf

("我傳送的資料:%5d \n"

, my_senddata)

;send

(sclient,

(const

char*)

(&my_senddata)

,sizeof

(my_senddata),0

);}closesocket

(sclient);}

closesocket

(slisten)

;wsacleanup()

;return0;

}

#include

#include

#include

#include

#include

#include

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

intmain

(int argc,

char

* ar**)

socket sclient =

socket

(af_inet, sock_stream, ipproto_tcp);if

(sclient == invalid_socket)

sockaddr_in seraddr;

seraddr.sin_family = af_inet;

seraddr.sin_port =

htons

(8888);

seraddr.sin_addr.s_un.s_addr =

inet_addr

("127.0.0.1");

if(connect

(sclient,

(sockaddr*

)& seraddr,

sizeof

(seraddr)

)== socket_error)

srand((

unsigned

)time

(null))

;for

(int i =

0; i <

20; i++

)else}}

closesocket

(sclient)

;wsacleanup()

;return0;

}

c 實現tcp伺服器 TCP套接字 C實現

udp套接字的介紹見另一篇文章 這篇文章已經介紹了很多基礎的巢狀字的函式,在這裡不做贅述,這篇實驗報告,只介紹udp中沒有的函式 實際上套接字是網際網路應用程式的介面,可以把它理解為你辦公室的門 當你想從你的辦公室給同事傳遞訊息時,你住需要把信放在門口,然後會有人 傳輸層等 會把信放到你的同事的門口...

利用網路套接字實現TCP互動

我們來了解一下tcp互動流程 大致流程如下 1 伺服器根據位址的型別 屬於ipv4還是ipv6等 socket型別 比如tcp udp 去建立socket,建立出的套接字socket本質上是個檔案描述符。2 伺服器繫結ip位址和埠號到套接字socket 3 伺服器socket 監聽 埠號請求,隨時準...

詳解C語言實現strcat

strcat 庫函式的原型如下 char strcat char dest,const char src 主要作用是把src指向的字串追加到dest指向的字串上。明白了這個作用之後我們就可以自己開始編寫實現這個函式。至於為什麼要自己編寫這個函式,面試的時候面試官就是想要這麼做,你想要這份offer的...