基於c 的C S網路通訊 從入門到精通(三)

2021-08-22 16:10:12 字數 2953 閱讀 4781

為了實現客戶端與伺服器的相互通訊,這次我們將加入多執行緒:乙個執行緒傳送資料,乙個執行緒接受資料

客戶端**如下:

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

using namespace std;

socket clientsocket;

handle hmutex;//互斥使用輸出窗體

int flag_connect = 1;

dword winapi fun_recv(lpvoid);

dword winapi fun_send(lpvoid);

int main()

else

//建立套接字

clientsocket = socket(af_inet, sock_stream, 0);

if (clientsocket == invalid_socket)

else

//初始化客戶端位址族變數

sockaddr_in addrsrv;

addrsrv.sin_family = af_inet;

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

addrsrv.sin_port = htons(8000);

//連線

iret=connect(clientsocket, (sockaddr*)&addrsrv, sizeof(sockaddr));

if (iret == socket_error)

else

handle send_thread = createthread(null, 0, fun_send, 0, 0, null);//建立傳送執行緒

handle recv_thread = createthread(null, 0, fun_recv, 0, 0, null);//建立接受執行緒

closehandle(send_thread);//關閉控制代碼

closehandle(recv_thread);//關閉控制代碼

hmutex = createmutex(null, false, l"mutex");//建立互斥量

while (flag_connect)

return 0; }

dword winapi fun_send(lpvoid) }

return 0;

}dword winapi fun_recv(lpvoid)

cout << recvbuff << endl;

} return 0;

}

伺服器端**如下:

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

using namespace std;

socket connectsocket;

socket serversocket;

handle hmutex;//互斥使用輸出窗體

int flag_connect = 1;

dword winapi fun_recv(lpvoid);

dword winapi fun_send(lpvoid);

int main()

//建立套接字

serversocket = socket(af_inet, sock_stream, 0);

if (serversocket == invalid_socket)

else

//初始化伺服器位址族變數

sockaddr_in addrsrv;

addrsrv.sin_family = af_inet;

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

addrsrv.sin_port = htons(8000);

//繫結

iret = bind(serversocket, (sockaddr*)&addrsrv, sizeof(sockaddr));

if (iret == socket_error)

else

//監聽

iret = listen(serversocket, 10);

if (iret == socket_error)

else

//接收連線

sockaddr_in addrclient;

int len = sizeof(sockaddr);

connectsocket=accept(serversocket, (sockaddr*)&addrclient, &len);

if (invalid_socket == connectsocket)

else

//接收資料

handle send_thread = createthread(null, 0, fun_send, 0, 0, null);//建立傳送執行緒

handle recv_thread = createthread(null, 0, fun_recv, 0, 0, null);//建立接受執行緒

closehandle(send_thread);//關閉控制代碼

closehandle(recv_thread);//關閉控制代碼

hmutex = createmutex(null, false, l"mutex");//建立互斥量

int i = 0;

while (flag_connect)

return 0;

}dword winapi fun_send(lpvoid)

} return 0;

}dword winapi fun_recv(lpvoid)

cout << recvbuff << endl;

} return 0;

}

問題:如果是多個客戶端又該如何實現呢?

網路通訊,基於TCP協議,C ,實現

tcp協議是乙個基本的網路協議,基本上所有的網路服務都是基於tcp協議的,如http,ftp 等等,所以要了解網路程式設計就必須了解基於tcp協議的程式設計。然而tcp協議是乙個龐雜的體系,要 徹底的弄清楚它的實現不是一天兩天的功夫,所幸的是在.net framework環境下,我們不必要去 部分 ...

基於UDP的網路通訊程式

我們知道tcp ip協議是至今發展最為成功的協議之一,也是整個網際網路的基礎。它在傳輸層有兩個不同的協議 tcp和udp,用途都很廣泛,下面我就udp做乙個示例程式。整個例子有兩個程式組成,乙個傳送資料,另乙個程式接收資料後,完成繪圖工作。本文程式執行效果圖如下 一 傳送程式 首先建立資料傳送程式 ...

用C 實現基於TCP協議的網路通訊

在下面的例子中,我們將建立乙個時間伺服器,包括伺服器端程式和客戶端程式。伺服器端監聽客戶端的連線請求,建立連線以後向客戶端傳送當前的系統時間。先執行伺服器端程式,下面截圖顯示了伺服器端程式執行的狀況 然後執行客戶端程式,客戶端首先傳送連線請求到伺服器端,伺服器端回應後傳送當前時間到客戶端,這是客戶端...