孫鑫教程14課網路程式設計

2021-06-06 11:55:55 字數 4856 閱讀 3456

孫鑫教程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 ...