本程序的功能是通過WIN32控制檯程序,以192。168。1。12爲主機的局域網內聊天
這是服務器端代碼:
ChatSrv.cpp
#include <Winsock2.h>
#include <stdio.h>
//預備工作:選擇 工程-->設置--》LINK->對象/庫模塊:添加:ws2_32.lib
void main(){
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
return;
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,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));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100],sendBuf1[100];
printf("chat Begin:/n");
gets(sendBuf1);
while(1){
if(sendBuf1[0]=='q')
send(sockConn,"q",2,0);
sprintf(sendBuf,"%s says:%s/n",inet_ntoa(addrClient.sin_addr),sendBuf1);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
if(sendBuf1[0]=='q'){
printf("youself make End.../n");
break;
}
printf("now wait for msg from client.../n");
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
if(recvBuf[0]=='q'){
printf("Client make Exit.../n");
break;
}
printf("Client says:%s/n",recvBuf);
printf("it's turn to you to chat..../n");
gets(sendBuf1); }
closesocket(sockConn);
}
這是客戶端程序代碼:
#include <Winsock2.h>
#include <stdio.h>
#include <conio.h>
//預備工作:選擇 工程-->設置--》LINK->對象/庫模塊:添加:ws2_32.lib
void main(){
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
return;
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.12");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
/* char HostName[100]; //這段代碼主要是獲得本機的計算機名和IP地址
struct hostent *pHost;
gethostname(HostName,100);
printf("HostName:%s/t",HostName);
pHost=gethostbyname(HostName);
char *IPAddress=inet_ntoa (*(struct in_addr *)pHost->h_addr_list[0]);
IPAddress[strlen(IPAddress)]='/0';
printf("ip:%s/n",IPAddress);
getch(); */
int status;
status=connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if(status==-1)
printf("Host not Exist.../n");
else{
char recvBuf[100];
char sendBuf[100];
while(1){
printf("now wait for msg.../n");
recv(sockClient,recvBuf,100,0);
if(recvBuf[0]=='q'){
printf("Host make exit.../n");
break;
}
printf("%s/n",recvBuf);
printf("It's you turn to chat.../n");
gets(sendBuf);
send(sockClient,sendBuf,strlen(sendBuf)+1,0);
if(sendBuf[0]=='q'){
printf("Client make exit.../n");
break;
}
}
}
WSACleanup();
closesocket(sockClient);
}
先運行主機端程序,再運行客戶端程序,之後就可以聊天了。哈哈!!!