基於TCP和UDP網路應用程式的編寫

2021-06-23 09:31:18 字數 3017 閱讀 8671

1、tcp

伺服器端:

#include #include int main()

//判斷是否我們請求的版本號

if (lobyte(wsadata.wversion) != 1 || hibyte(wsadata.wversion) != 1)

//建立用於監聽的套接字

//第三個引數為0,這樣函式將根據位址格式和套接字類別自動選擇乙個合適的協議

socket socksrv = socket(af_inet,sock_stream,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr = htonl(inaddr_any);

addrsrv.sin_family = af_inet;

addrsrv.sin_port = htons(6000);

//繫結套接字

bind(socksrv,(sockaddr *)&addrsrv,sizeof(sockaddr));

//將套接字設為監聽模式,準備接收客戶請求

//設定等待連線佇列的最大長度為6

listen(socksrv,6);

//接收客戶端的位址資訊

sockaddr_in addrclient;

int len = sizeof(sockaddr);

while(1)

return 0;

}

客戶端:

#include#includeint main()

if (lobyte(wsadata.wversion) != 1 || hibyte(wsadata.wversion) != 1)

//建立套接字

socket sockclient = socket(af_inet,sock_stream,0);

sockaddr_in addrsrv;

//因為本例是服務端和客戶端都是本地的,所以使用乙個特殊的ip位址,本地迴路位址,127.0.0.1

addrsrv.sin_addr.s_un.s_addr = inet_addr("127.0.0.1");

addrsrv.sin_family = af_inet;

addrsrv.sin_port = htons(6000);

//向伺服器發出連線請求,對於客戶端來說,它不需要繫結,可以直接連線伺服器

connect(sockclient,(sockaddr *)&addrsrv,sizeof(sockaddr));

//接收資料

char recvbuf[100];

recv(sockclient,recvbuf,100,0);

printf("%s\n",recvbuf);

//傳送資料

send(sockclient,"this is sharing",strlen("this is sharing") + 1,0);

//關閉套接字

closesocket(sockclient);

wsacleanup();

return 0;

}

2、udp

伺服器端:

#include#includeint main()

if (lobyte(wsadata.wversion) != 1 || hibyte(wsadata.wversion) != 1)

//建立套接字

socket socksrv = socket(af_inet,sock_dgram,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr = htonl(inaddr_any);

addrsrv.sin_family = af_inet;

addrsrv.sin_port = htons(6000);

//繫結套接字

bind(socksrv,(sockaddr *)&addrsrv,sizeof(sockaddr));

//等待並接收資料

sockaddr_in addrclient;

int len = sizeof(sockaddr);

char recvbuf[100];

recvfrom(socksrv,recvbuf,100,0,(sockaddr *)&addrclient,&len);

printf("%s\n",recvbuf);

//關閉套接字

closesocket(socksrv);

wsacleanup();

return 0;

}

客戶端:

#include#includeint main()

if (lobyte(wsadata.wversion) != 1 || hibyte(wsadata.wversion) != 1)

//建立套接字

socket sockclient = socket(af_inet,sock_dgram,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr = htonl("127.0.0.1");

addrsrv.sin_family = af_inet;

addrsrv.sin_port = htons(6000);

//傳送資料

sendto(sockclient,"hello",strlen("hello") + 1,0,(sockaddr *)&addrsrv,sizeof(sockaddr));

//關閉套接字

closesocket(sockclient);

wsacleanup();

return 0;

}

ps:注意基於tcp和udp的網路應用程式在接收和傳送資料使用的函式不一樣,前者是recv和send,後者使用recvfrom和sendto。

基於UDP的 C S模式 網路應用程式

伺服器端程式實現步驟 1。建立套接字 socket 2。將套接字繫結到乙個本地位址和埠上 bind 3。等待接收資料 recvfrom 4。關閉套接字。伺服器端 include includevoid main if lobyte wsadata.wversion 1 hibyte wsadata....

基於TCP和UDP的Socket網路應用程式

基於tcp和udp的socket網路應用程式 計算機網路課設 一 需求分析 利用socket編寫乙個簡單的網路應用程式,獲取伺服器當前的時間和日期。說明與要求 1 對客戶與伺服器之間使用的協議進行設計。2 分別採用流式套接字和資料報套接字進行實現。二 程式設計 2.1 基於tcp協議的流程 編寫用t...

基於TCP的 C S模式 網路應用程式

伺服器端程式實現步驟 1。建立套接字 socket 2。將套接字繫結到乙個本地位址和埠上 bind 3。將套接字設為監聽模式,準本接受客戶請求 listen 4。等待客戶請求到來 當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字 accept 5。用返回的套接字和客戶端進行通訊 sen...