大家都知道網路程式設計有非同步非租塞方式,同步租塞方式,同步租塞方式邏輯簡單,非同步非租塞方式程式設計複雜.很多的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.所謂同步,可以理解為在執行完乙個函式或方法之後,一直等待系統返回值或訊息,這時程式是出於阻塞的,只有接收到返回的值或訊息後才往下執行其他的命令。非同步,執行完函式或方法後,不必阻塞性地等待返回值或訊息,只需要向系統委託乙個非同步過程,那麼當系統接收到返回值或訊息時,系統會自動觸發委託的非同步過程...