網絡編程之初

本程序的功能是通過WIN32控制檯程序,以192168112爲主機的局域網內聊天

這是服務器端代碼:

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);      

}

 

 

先運行主機端程序,再運行客戶端程序,之後就可以聊天了。哈哈!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章