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...