為了實現客戶端與伺服器的相互通訊,這次我們將加入多執行緒:乙個執行緒傳送資料,乙個執行緒接受資料
客戶端**如下:
#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協議的網路通訊
在下面的例子中,我們將建立乙個時間伺服器,包括伺服器端程式和客戶端程式。伺服器端監聽客戶端的連線請求,建立連線以後向客戶端傳送當前的系統時間。先執行伺服器端程式,下面截圖顯示了伺服器端程式執行的狀況 然後執行客戶端程式,客戶端首先傳送連線請求到伺服器端,伺服器端回應後傳送當前時間到客戶端,這是客戶端...