mfc socket網路程式設計(流程示例)
伺服器端程式:
1、載入套接字型檔
2、建立套接字(socket)。
3、將套接字繫結到乙個本地位址和埠上(bind)。
4、將套接字設為監聽模式,準備接收客戶請求(listen)。
5、等待客戶請求到來;當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字(accept)。
6、用返回的套接字和客戶端進行通訊(send/recv)。
7、返回,等待另一客戶請求。
8、關閉套接字。
客戶端程式:
1、載入套接字型檔
2、建立套接字(socket)。
3、向伺服器發出連線請求(connect)。
4、和伺服器端進行通訊(send/recv)。
5、關閉套接字。
伺服器端**如下:
#include
//加裁標頭檔案
#include
//載入標準輸入輸出標頭檔案
void
main()
//載入套接字型檔,加裁失敗則返回 if(
lobyte
( wsadata.wversion )!=1
||hibyte
( wsadata.wversion )!=1
)//如果不是1.1的則退出
socket socksrv=
socket
(af_inet,sock_stream,0)
;//建立套接字(socket)。
sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr=
htonl
(inaddr_any)
;//轉換unsigned short為網路位元組序的格式 addrsrv.sin_family=af_inet;
addrsrv.sin_port=
htons
(6000);
bind
(socksrv,
(sockaddr*
)&addrsrv,
sizeof
(sockaddr));
//將套接字繫結到乙個本地位址和埠上(bind) listen(socksrv,5);//將套接字設為監聽模式,準備接收客戶請求(listen)。
sockaddr_in addrclient;
//定義位址族
int len=
sizeof
(sockaddr)
;//初始化這個引數,這個引數必須被初始化
while(1
)}
客戶端**如下:
#include
#include
void
main()
if(lobyte
( wsadata.wversion )!=1
||hibyte
( wsadata.wversion )!=1
) socket sockclient=
socket
(af_inet,sock_stream,0)
;//建立套接字(socket)。
sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr=
inet_addr
("127.0.0.1");
addrsrv.sin_family=af_inet;
addrsrv.sin_port=
htons
(6000);
connect
(sockclient,
(sockaddr*
)&addrsrv,
sizeof
(sockaddr));
//向伺服器發出連線請求(connect)。
char recvbuf[
100]
;//和伺服器端進行通訊(send/recv)。
recv
(sockclient,recvbuf,
100,0)
;printf
("%s\n"
,recvbuf)
;send
(sockclient,
"this is blues_j"
,strlen
("this is blues_j")+
1,0)
;closesocket
(sockclient)
;//關閉套接字。
wsacleanup()
;//必須呼叫這個函式清除引數
}
2.udp型套接字。 伺服器端(接收端)程式:
1、建立套接字(socket)。
2、將套接字繫結到乙個本地位址和埠上(bind)。
3、等待接收資料(recvfrom)。
4、關閉套接字。 客戶端(傳送端)程式:
1、建立套接字(socket)。
2、向伺服器傳送資料(sendto)。
3、關閉套接字。
伺服器端**:
#include
#include
void
main()
if(lobyte
( wsadata.wversion )!=1
||hibyte
( wsadata.wversion )!=1
) socket socksrv=
socket
(af_inet,sock_dgram,0)
; sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr=
htonl
(inaddr_any)
; addrsrv.sin_family=af_inet;
addrsrv.sin_port=
htons
(6000);
bind
(socksrv,
(sockaddr*
)&addrsrv,
sizeof
(sockaddr));
sockaddr_in addrclient;
int len=
sizeof
(sockaddr)
;char recvbuf[
100]
;recvfrom
(socksrv,recvbuf,
100,0,
(sockaddr*
)&addrclient,
&len)
;printf
("%s\n"
,recvbuf)
;closesocket
(socksrv)
;wsacleanup()
;}
客戶端**:
#include
#include
void
main()
if(lobyte
( wsadata.wversion )!=1
||hibyte
( wsadata.wversion )!=1
) socket sockclient=
socket
(af_inet,sock_dgram,0)
; sockaddr_in addrsrv;
addrsrv.sin_addr.s_un.s_addr=
inet_addr
("127.0.0.1");
addrsrv.sin_family=af_inet;
addrsrv.sin_port=
htons
(6000);
sendto
(sockclient,
"hello"
,strlen
("hello")+
1,0,
(sockaddr*
)&addrsrv,
sizeof
(sockaddr));
closesocket
(sockclient)
;wsacleanup()
;}
3.聊天程式常用的是udp式套接字。因為tcp的三步握手開銷比較大 MFC Socket網路程式設計 TCP IP
為了更了解網路開發的流程,可以先通過掌握winsock再去掌握別的網路開發庫,掌握傳統的winsock可以對網路開發的架構有乙個清晰框架,初學者可以先從乙個入門的winsock程式開始 服務端 wsadata data word versions makeword 2,0 int iresult w...
MFC Socket程式設計
再此之際,記錄一下自己編寫socket的過程,實現wifi通訊。應用場景 外設系統作為ap模式下的伺服器。電腦端pc軟體作為ap模式下的客戶端。第一步 初始化socket bool csocketport initialize if lobyte wsadata.wversion 1 hibyte ...
MFC Socket網路程式設計之TCP伺服器端
tcp ip與osi7層參考模型的對應關係 osi的第12層也就是物理層 和資料鏈路層 對應於tcp ip的網路介面 osi的第3層網路層對應tcp ip的網路層 osi的傳輸層對應tcp ip的傳輸層 osi的567層也就是會話層,表示層,應用層 對應tcp ip的應用層 osi參考模型並不是真正...