基於socket的TCP和UDP通訊的簡單建立

2021-08-06 03:13:23 字數 2939 閱讀 3913

最近在學習linux網路程式設計,寫下此學習筆記。

伺服器端:

1.呼叫socket()函式定義套接字;

2.呼叫bind()函式繫結本地位址和埠;

3.呼叫listen()函式啟動監聽端;

4.呼叫accept()函式從已連線佇列中提取客戶鏈結,accept為阻塞型別函式,當連線隊列為空時,阻塞等待;

5.呼叫io函式與客戶端通訊;

6.關閉套接字;

客戶端:

1. 呼叫socket()函式建立套接字;

2. 呼叫connect()函式鏈結伺服器端;

3. 呼叫io函式(read/write等)與伺服器端進行通訊;

4. 呼叫close()關閉套接字。

伺服器端:

1.呼叫socket()函式定義套接字

2.呼叫bind()函式繫結本地位址和埠;

3.呼叫recvfrom()和sendto()函式進行通訊;

客戶端 1.呼叫socket()函式建立套接字;

2.呼叫recvfrom()和sendto()函式進行通訊;

/*

* tcp--server

*/#include

#include

#include

#include

#include

#include

int main(int argc,char*argv) // 執行時候輸入埠號

/* 1.建立套接字 */

int sockfd = socket(af_inet,sock_stream,0);

printf("sockfd:%d\n",sockfd);

/* 2.繫結位址 */

struct sockaddr_in srvaddr,cliaddr;

socklen_t len = sizeof(srvaddr);

bzero(&srvaddr,len);

srvaddr.sin_family = af_inet;

srvaddr.sin_port = htons(atoi(argv[1]));

srvaddr.sin_addr.s_addr = htonl(inaddr_any);

bind(sockfd,(struct sockaddr *)&srvaddr,len);

/* 3.監聽套接字 */

listen(sockfd,5); // 「5」表示最大監聽個數為5

char peer[16];

/* 4.等待客戶端發起連線,連線成功就返回乙個新的檔案描述符 */

int connfd = accept(sockfd,(struct sockaddr *)&cliaddr,&len);

if(connfd > 0)

char buf[100]; // 用於存放讀取到的資料

while(1)

/* 通訊完畢,關閉套接字 */

close(connfd);

close(sockfd);

return

0;}

/*

* tcp---client

*/#include

#include

#include

#include

#include

#include

int main(int argc, char

const *argv)

/* 1.建立套接字 */

int sockfd = socket (af_inet, sock_stream, 0);

printf("sockfd : %d\n", sockfd);

/* 設定伺服器ip與埠號 */

struct sockaddr_in seraddr;

seraddr.sin_family = af_inet;

seraddr.sin_port = htons(atoi(argv[2]));

inet_pton(af_inet, argv[1], &seraddr.sin_addr);

/* 傳送連線請求 */

int ret = connect(sockfd, (struct sockaddr *)&seraddr, sizeof(seraddr));

if (ret == -1)

/* 傳送訊息 */

char buf[100]; //用於儲存傳送的資料

while(1)

/* 通訊結束,關閉套接字 */

close(sockfd);

return

0;}

/*

* udp -----server

*/#include

#include

#include

#include

#include

#include

int main(int argc,char *argv) // 執行時需要指定埠號

/* 4.關閉套接字檔案 */

close(sockfd);

}

/*

* udp----client

*//* udp客戶端 */

#include

#include

#include

#include

#include

#include

int main(int argc,char *argv) // ./jack 192.168.1.3 50001

/* 4.關閉套接字 */

close(sockfd);

return

0;}

基於tcp和udp的socket通訊

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

基於Socket的UDP和TCP協議

一 概述 tcp 傳輸控制協議 和udp 使用者資料報協議 是網路體系結構tcp ip模型中傳輸層一層中的兩個不同的通訊協議。tcp 傳輸控制協議,一種面向連線的協議,給使用者程序提供可靠的全雙工的位元組流,tcp套介面是位元組流套介面 stream socket 的一種。udp 使用者資料報協議。...

基於C 和TCP的Socket通訊

很長時間沒寫部落格了,希望自己可以堅持下去,從小白開始成長吧,也希望各位讀者能給點鼓勵。本文實現的功能是基於c 和tcp進行服務端客戶端進行通訊,希望給你給讀者一定的幫助。具體步驟 1 初始化scoket 資源,注意,一定要在同一段 中實現,不然可能會出問題。2 構造服務端socket 3 繫結監聽...