實現伺服器端的多執行緒SOCKET Server

2021-03-31 08:56:31 字數 1670 閱讀 8932

想要實現的功能:在伺服器端有乙個控制台程式(或者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*  argv)  

//bind  a  socket  

sockaddr_in  service;  

service.sin_family=af_i***;  

service.sin_addr.s_addr=i***_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與該...