想要實現的功能:在伺服器端有乙個控制台程式(或者windows服務),與多個客戶端程式通訊,其中主線程有乙個socket繫結在乙個固定埠上,負責監聽客戶端的socket資訊。每當啟動乙個客戶端程式,客戶端傳送來乙個socket連線請求,server端就新開啟乙個執行緒,並在其中建立乙個socket與該客戶端的socket通訊,直到客戶端程式關閉,結束該執行緒。主線程中的socket在應用程式退出時關閉。
這裡是server端**的簡單示意,展示了如何建立多執行緒的socket server。
#include "stdafx.h"
#include
dword winapi answerthread(lpvoid lparam)
while(bytesrecv==socket_error)
//write your processing code here
send(clientsocket,recvbuf,strlen(recvbuf),0);
printf("%s/n",recvbuf);
} return 0;
} int main(int argc,char* ar**)
//bind a socket
sockaddr_in service;
service.sin_family=af_inet;
service.sin_addr.s_addr=inet_addr("172.16.3.250");
service.sin_port=htons(2501);
if(bind(m_socket,(sockaddr*)&service,sizeof(service))==socket_error)
else
printf("bind ok./n");
//listen on a socket
if(listen(m_socket,20)==socket_error)
printf("error listening on socket./n");
else
printf("listening ok./n");
//accept a connection
socket acceptsocket;
printf("waiting for a client to connect.../n");
while(1)
printf("client connected./n");
dword dwthreadid;
handle hthread;
hthread=createthread(null,null, answerthread,
(lpvoid)acceptsocket,0,&dwthreadid);
if(hthread==null)
else
} return 0;
}
socket
的客戶端程式就很簡單了,可以使用
vb拖乙個
winsock
控制項到form
中,然後連線伺服器的
socket
並傳送資料就行了。
多執行緒伺服器端的實現
1.單cpu系統中如何同時執行多個程序?請解釋該過程中發生的上下文切換。答 只有1個cpu cpu的運算裝置core 的系統中不是也可以同時執行多個程序嗎?只是因為系統將cpu時間分成了多個微小的塊後分配給了多個程序。為了分時使用cpu,需要 上下文切換 的過程。2.為何執行緒上下文切換更快?執行緒...
實現伺服器端的多執行緒SOCKET Server
想要實現的功能 在伺服器端有乙個控制台程式 或者windows服務 與多個客戶端程式通訊,其中主線程有乙個socket繫結在乙個固定埠上,負責監聽客戶端的socket資訊。每當啟動乙個客戶端程式,客戶端傳送來乙個socket連線請求,server端就新開啟乙個執行緒,並在其中建立乙個socket與該...
實現伺服器端的多執行緒SOCKET Server
想要實現的功能 在伺服器端有乙個控制台程式 或者windows服務 與多個客戶端程式通訊,其中主線程有乙個socket繫結在乙個固定埠上,負責監聽客戶端的socket資訊。每當啟動乙個客戶端程式,客戶端傳送來乙個socket連線請求,server端就新開啟乙個執行緒,並在其中建立乙個socket與該...