孫鑫教程14課網路程式設計
使用tcp/ip協議的伺服器端程式:
win32 控制台程式
#include
#include
void main()
if ( lobyte( wsadata.wversion ) != 1||
hibyte( wsadata.wversion ) != 1 )
socket sksrv=socket(af_inet,sock_stream,0);
sockaddr_in adsrv;
adsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);//網路位元組序
adsrv.sin_family=af_inet;
adsrv.sin_port=htons(6000);
bind(sksrv,(sockaddr*)&adsrv,sizeof(sockaddr_in));
listen(sksrv,5);
sockaddr_in addrclient;
int addrlen=sizeof(sockaddr_in);
char sendbuf[100]="伺服器傳送的資料是我是伺服器";;
char recvbuf[100];
char tempbuf[200];
while (true) }
#include
#include
void main()
if ( lobyte( wsadata.wversion ) != 1||
hibyte( wsadata.wversion ) != 1 )
socket skclient=socket(af_inet,sock_stream,0);
sockaddr_in adsrv;
adsrv.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");//在本機上做測試,所以選此位址
adsrv.sin_family=af_inet;
adsrv.sin_port=htons(6000);
int len=sizeof(sockaddr_in);
connect(skclient,(sockaddr*)&adsrv,len);
//下面這段**adclient只是為了演示客戶端的位址。若不需要顯示客戶端位址,不需要sockaddr_in adclient。
sockaddr_in adclient;
adclient.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");//在本機上做測試,所以選此位址
adclient.sin_family=af_inet;
adclient.sin_port=htons(6000);
char recvbuf[100];
char sendbuf[100]="客戶端傳送的資料是我是客戶端";
char tempbuf[100];
recv(skclient,recvbuf,100,0);
sprintf(tempbuf,"客戶端%s從%s接收的資料是:%s",inet_ntoa(adclient.sin_addr),
inet_ntoa(adsrv.sin_addr),recvbuf);
printf("%s/n",tempbuf);
send(skclient,sendbuf,strlen(sendbuf)+1,0);
sprintf(tempbuf,"客戶端%s向%s傳送的資料是:%s",inet_ntoa(adclient.sin_addr),
inet_ntoa(adsrv.sin_addr),sendbuf);
printf("%s/n",tempbuf);
closesocket(skclient);
wsacleanup( ); }
注意,客戶端和伺服器端的目錄應該是平級的。執行的時候,先執行伺服器端,再執行客戶端。注:要在工程中的設定的鏈結中加上ws2_32.lib。
udp 的伺服器端的程式:
#include
#include
void main()
if ( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1 )
socket sk=socket(af_inet,sock_dgram,0);
sockaddr_in skaddr;
skaddr.sin_addr.s_un.s_addr=htonl(inaddr_any);
skaddr.sin_port=htons(6000);
skaddr.sin_family=af_inet;
bind(sk,(sockaddr*)&skaddr,sizeof(sockaddr_in));
sockaddr_in addrclient;
char recvbuf[100];
int len=sizeof(sockaddr_in);
recvfrom(sk,recvbuf,100,0,(sockaddr*)&addrclient,&len);
printf("%s/n",recvbuf);
closesocket(sk);
wsacleanup(); }
下面是udp的客戶端程式:
注:和伺服器端平級。
include
#include
void main()
if ( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1 )
socket sk=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);
char sendbuf[100];
sendto(sk,"hello",sizeof("hello")+1,0,(sockaddr*)&addrsrv,sizeof(sockaddr));
closesocket(sk);
wsacleanup(); }
下面是基於字元介面的聊天程式:
伺服器端的應用程式:win32控制台的:
#include
#include
void main()
if ( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1 )
socket sksrv=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(sksrv,(sockaddr*)&addrsrv,sizeof(sockaddr_in));
char recvbuf[100];
char sendbuf[100];
char tempbuf[200];
sockaddr_in addrclient;
int len=sizeof(sockaddr_in);
while (1)
sprintf(tempbuf,"%s say %s",inet_ntoa(addrclient.sin_addr),recvbuf);
printf(tempbuf);
printf("please input data:/n");
gets(sendbuf);
sendto(sksrv,sendbuf,sizeof(sendbuf),0,(sockaddr*)&addrclient,len);
}closesocket(sksrv);
wsacleanup(); }
客戶端的應用程式:win32控制台的:
#include
#include
void main()
if ( lobyte( wsadata.wversion ) != 1 ||
hibyte( wsadata.wversion ) != 1 )
socket skclient=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);
char recvbuf[100];
char sendbuf[100];
char tempbuf[200];
int len=sizeof(sockaddr_in);
while (1)
sprintf(tempbuf,"%s say %s",inet_ntoa(addrsrv.sin_addr),recvbuf);
printf(tempbuf); }
} 載入套接字型檔,繫結位址資訊,基於tcp,設定監聽,用accept接收客戶端請求。對於udp來說,不需要建立連線,直接接收和傳送資料。通過這幾個函式就可以完成。
孫鑫教程筆記(七)
1 sendmessage 和postmessage 的區別a sendmessage 和將 直接放置到 sendmessage 位置的效果一樣 b postmessage 是將訊息放置到訊息佇列之中,立即返回,這時候訊息等待處理 2 移動視窗 movewindow 3 setwindowtext ...
孫鑫第一課
n 1.msg typedef struct tagmsg msg 2.控制代碼 handle 資源的標識。n 作業系統要管理和操作這些資源,都是通過控制代碼來找到對應的資源。按資源的型別,又可將控制代碼細分成圖示控制代碼 hicon 游標控制代碼 hcursor 視窗控制代碼 hwnd 應用程式例...
孫鑫MFC第十四講 網路程式設計
伺服器端 include include void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 socket socksrv socket af inet,sock stream,0 sockaddr in addrsrv ...