本程序的功能是通过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);
}
先运行主机端程序,再运行客户端程序,之后就可以聊天了。哈哈!!!