Trò chuyện với máy chủ C++

lập trình


máy chủ khách nhắn tin cho cùng một máy nhưng không hoạt động trên các máy tính riêng biệt.

Những gì tôi đã thử:

Client.cpp

#include<iostream>
#include<string.h>
#include
#include
#include
#include
#include<stdlib.h>
#include<unistd.h>
#include<netdb.h>
using namespace std;

#define IP "192.168.56.1"
int main(){
     int client,server;
    int portNum=1500;
    bool isExit=false;
    int bufsize=1024;
    char buffer[bufsize];

   // char *ip= "192.168.1.101";
     struct sockaddr_in server_addr;
     client=socket(AF_INET,SOCK_STREAM,0);
     
     if(client<0){
        cout<< "Error createing socket." <<endl;
        exit(1);
        
        }
        
         cout<< "Client Socket created." <<endl;
        server_addr.sin_family=AF_INET;
        
     server_addr.sin_addr.s_addr = inet_addr(IP);
        server_addr.sin_port=htons(portNum);
        if (connect(client,(struct sockaddr *)&server_addr, sizeof(server_addr)) == 0)
        cout << "=> Connection to the server " << inet_ntoa(server_addr.sin_addr) << " with port number: " << portNum << endl; 
             recv(client,buffer,bufsize,0);
             cout<< "Connection confirmed." <<endl;
            cout<< "Enter # to end the connection." <<endl;
            
            do{
                 cout<< "Client:" << " " ;
                 do{
                     cin >> buffer;
                send(client,buffer,bufsize,0);
                 if(*buffer=='#'){
                                send(client,buffer,bufsize,0);
                                *buffer='*';
                                isExit=true;
                                }
                 }while(*buffer != 42);
                  cout<< "Server:  " << " " ;
                   do{
                                 recv(client,buffer,bufsize,0);
                                   cout<< buffer << " ";
                                    if(*buffer=='#'){
                                        *buffer='*';
                                        isExit=true; 
                                        
                                        }
                   }while(*buffer != 42);
                   cout << endl;
            }while(!isExit);
              cout<< "Connection terminated." <<endl; 
                close(client);
                return 0;
    }

Máy chủ.cpp

#include<iostream>
#include<string.h>
#include
#include
#include
#include<stdlib.h>
#include<unistd.h>
#include

#define IP "127.0.0.1"

using namespace std;
int main(){
    
    int client,server;
    int portNum=1500;
    bool isExit=false;
    int bufsize=1024;
    char buffer[bufsize];
    struct sockaddr_in server_addr;
    socklen_t size;
    client=socket(AF_INET,SOCK_STREAM,0);
    if(client<0){
        cout<< "Error establishing connection." <<endl;
        exit(1);
        
        }
        cout<< "Server Socket connection created." <<endl;
        server_addr.sin_family=AF_INET;
        server_addr.sin_addr.s_addr = htons(INADDR_ANY);
        server_addr.sin_port= htons(portNum);
        
        //binding socket
        
        if(bind(client, (struct sockaddr*)&server_addr,sizeof(server_addr))<0){
             cout<< "Error binding socket." <<endl;
             exit(1);
            }
            size=sizeof(server_addr);
            cout<< "Looking for clients" <<endl;
        //listening socket
        
            listen(client,1);
        //accept client
        
            server = accept(client,(struct sockaddr*)&server_addr,&size);
            if(server<0){
                cout<< "Error on accepting." <<endl;
             exit(1);
                
                }
                
                while(server>0){
                    
                    strcpy(buffer,"Server connected..\n");
                    send(server,buffer,bufsize,0);
                    cout<< "Connected with client." <<endl;
                    cout<< "Enter # to end the connection." <<endl;
                    cout<< "Client: " << " " ;
                    
                     do{
                        recv(server,buffer,bufsize,0);
                        cout<< buffer << " ";
                        if(*buffer=='#'){
                            *buffer='*';
                            isExit=true;
                            }
                        }while(*buffer!= '*');
                          
                       
                        do{
                            cout << "\nServer:" <<  " ";
                            do{
                                cin>>buffer;
                                send(server,buffer,bufsize,0);
                                 if(*buffer=='#'){
                                send(server,buffer,bufsize,0);
                                *buffer='*';
                                isExit=true;
                                }
                            }while(*buffer != '*');
                            
                             cout<< "Client:  " << " " ;
                             do{
                                 recv(server,buffer,bufsize,0);
                                   cout<< buffer << " ";
                                    if(*buffer=='#'){
                                        *buffer='*';
                                        isExit=true; 
                                        
                                        }
                                 }while(*buffer != '*');
                            
                        }while(!isExit);
                 cout<< "Connection terminated." <<endl; 
                 isExit=false;
                 exit(1) ;
             }
close(client);
return 0;     
                            
    }

Giải pháp 1

Câu trả lời cho lý do tại sao nó không hoạt động trên các PC riêng biệt rất đơn giản và không liên quan gì đến mã của bạn.

Nó được gọi là FIREWALL bạn đang sử dụng cổng 1500, bạn sẽ cần mở cổng đó trên tường lửa trên cả hai PC.

Giả sử bạn đang ở trên windows, (tìm kiếm phù hợp nếu trên linux):
Mở một cổng trong Tường lửa của Windows – Windows Help[^]

コメント

タイトルとURLをコピーしました