C語言實現socket通訊TCP 程式參考

2021-09-29 20:43:58 字數 3995 閱讀 5953

開發環境:centos7

編譯:gcc

先執行服務端,再執行客戶端。連線完畢,客戶端可以傳送訊息。

客戶端傳送了 「1」,服務端收到訊息並列印,此時輪到服務端傳送訊息。

服務端傳送訊息「2」,客戶端收到訊息也進行列印,之後不斷重複。

在客戶端/服務端等待對方傳送訊息的同時,並沒有限制其繼續輸入訊息。所以會有下圖的這種效果,等待過程中傳送的訊息會在對方傳送訊息後,給對方傳送過去。

全部收完後,又恢復剛開始的樣子。(可能會存在上限【類似緩衝區的東西(猜測)】,有待測試)

**中使用了gets,可以更改為 fgets(buf,1000,stdin);

服務端 server.c

#include

#include

#include

#include

#include

#include

intmain()

printf

("準備位址...\n");

struct sockaddr_in addr =

; addr.sin_family = af_inet;

addr.sin_port =

htons

(7777);

addr.sin_addr.s_addr =

inet_addr

("127.0.0.1");

socklen_t len =

sizeof

(addr)

;printf

("繫結socket與位址...\n");

if(bind

(sockfd,

(struct sockaddr*

)&addr,len)

)printf

("設定監聽...\n");

if(listen

(sockfd,5)

)printf

("等待客戶端連線...\n");

for(;;

);int clifd =

accept

(sockfd,

(struct sockaddr*

)&addrcli,

&len);if

(0> clifd)if(

0==fork()

);for(;;

)printf

(">");

gets

(buf)

;write

(clifd,buf,

strlen

(buf)+1

);}}

}close

(sockfd)

;}

客戶端 client.c

#include

#include

#include

#include

#include

#include

intmain()

printf

("準備位址...\n");

struct sockaddr_in addr =

; addr.sin_family = af_inet;

addr.sin_port =

htons

(7777);

addr.sin_addr.s_addr =

inet_addr

("127.0.0.1");

socklen_t len =

sizeof

(addr)

;printf

("繫結連線伺服器...\n");

if(connect

(sockfd,

(struct sockaddr*

)&addr,len)

)for(;

;);printf

(">");

gets

(buf)

;write

(sockfd,buf,

strlen

(buf)+1

);if(

0==strcmp

("quit"

,buf)

)printf

("read:");

read

(sockfd,buf,

sizeof

(buf));

printf

("%s\n"

,buf);}

close

(sockfd)

;}

作業系統:win10

編譯環境:mingw (gcc)

編譯gcc server.c -lwsock32 -o server

server.c

// 編譯 gcc server.c -lwsock32 -o server

#include

#include

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

//載入ws2_32.dll

intmain

(int ar**,

char

* argc)

;for(;

;)printf

(">");

gets

(buf)

;send

(clntsock, buf,

strlen

(buf)

+sizeof

(char),

0);}

//關閉套接字

closesocket

(clntsock)

;closesocket

(servsock)

;//終止dll使用

wsacleanup()

;return0;

}

client.c
// 編譯 gcc client.c -lwsock32 -o client

#include

#include

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

intmain

(int ar**,

char

* argc)

;for(;

;)printf

("read:");

recv

(clntsock, buf,

1024,0

);printf

("%s\n"

,buf);}

//關閉套接字

closesocket

(clntsock)

;//終止dll

wsacleanup()

;return0;

}

C 語言 實現的socket 通訊

server端 cpp view plain copy include include include include include include include intserverport 8000 intmain 建立ipv4位址 bzero listeningsockaddr,sizeof...

python3 5實現socket通訊 TCP)

tcp連線 tcp是面向連線的乙個協議,意味著,客戶端和伺服器開發傳送資料之前,需要先握手建立乙個tcp連線。tcp連線的一端與客戶端套接字相互聯絡,另一端與伺服器套接字相聯絡。當建立該tcp連線的時,我們需要講客戶端與伺服器的套接字位址 ip位址和埠號 關聯起來。使用建立的tcp連線,當一側要向另...

c語言實現TCP socket通訊

tcp面向位元組流傳輸資料,提供可靠的資料傳輸服務。通過tcp傳送的資料無差錯 不丟失 不重 復,而且按序到達。由於tcp是基於連線的,所以每一條tcp連線只能是點到點的互動通訊。伺服器端初始化winsock環境後,便呼叫socket函式建立流式套接字 然後對sockaddr in結構體進行設 置,...