同步租塞SOCKET程式設計

2021-04-13 07:36:20 字數 1406 閱讀 8369

大家都知道網路程式設計有非同步非租塞方式,同步租塞方式,同步租塞方式邏輯簡單,非同步非租塞方式程式設計複雜.很多的c/s模式大都採用非同步非租塞方式,在網路上也有大量的例子程式,而對於同步租塞方式卻很少,下面**為同步租塞方式予以參考:  

注:伺服器也使用的是同步方式

socket   sock; 

wsadata   wsadata;  

sockaddr_in   addr;  

int   len=sizeof(sockaddr_in);

std::string strbuff = _t("");

std::string strsend = _t(""); 

int ireadlen = 0;

if(wsastartup(makeword(2,2),   &wsadata)!=0)  

if((sock=socket(af_inet,sock_stream,ipproto_tcp))==invalid_socket)  

//設定為同步阻塞方式 

ulong   ularg=0;  

int iret = ioctlsocket(sock,fionbio,&ularg);

//設定接受超時時間

int ircvtimeout = 5000;  //5秒

setsockopt(sock,sol_socket,so_rcvtimeo,(char*)&ircvtimeout,sizeof(int));

bool          bl      = true;

setsockopt( sock , ipproto_tcp, tcp_nodelay , (const char*)&bl, sizeof(bool));

setsockopt( sock , ipproto_tcp, so_keepalive, (const char*)&bl, sizeof(bool));

addr.sin_addr.s_un.s_addr=htonl(inaddr_any);  

addr.sin_addr.s_un.s_addr= inet_addr("211.138.113.137");

addr.sin_family=af_inet; //使用tcp/ip協議

addr.sin_port=htons(8039); //客戶端指定的ip位址

int nconnect=connect(sock,(lpsockaddr)&addr,sizeof(addr)); //請求連線

if (nconnect == 0)

;char sztempbuff[1025] = ;

while (1)

else if (iread == 0)

else}}

int iclose = closesocket(sock);

wsacleanup();

Socket程式設計 同步的應用

同步程式設計使用的情況不多,在以下3種情況下可以使用同步 1.客戶端數量較少情況下的服務端程式設計 2.客戶端數量較多,但都是短連線情況下的服務端程式設計 3.客戶端程式設計 以下主要針對服務端程式設計的2種情況,分別做一示例,以下示例均使用tcp協議.1.在客戶端數量較少的情況下,數量較少是指會同...

非同步SOCKET與同步SOCKET

windows 套接字在兩種模式下執行 i o操作,阻塞和非阻塞。在阻塞模式下,在 i o操作完成前,執行操作的 winsock 函式會一直等待下去,不會立即返回程式 將控制權交還給程式 而在非阻塞模式下,winsock 函式無論如何都會立即返回。windows sockets 的非同步選擇函式 w...

Socket 同步與非同步

1.所謂同步,可以理解為在執行完乙個函式或方法之後,一直等待系統返回值或訊息,這時程式是出於阻塞的,只有接收到返回的值或訊息後才往下執行其他的命令。非同步,執行完函式或方法後,不必阻塞性地等待返回值或訊息,只需要向系統委託乙個非同步過程,那麼當系統接收到返回值或訊息時,系統會自動觸發委託的非同步過程...