2016-05-16 3 views
0

私はSFMLネットワークを学び始めました....私はサーバクライアントチャットボックスを作っています...私はPC上でクライアントプログラムを実行すると、それも私のPC上で動作しているサーバに接続します。クライアントのSFMLネットワーキングサーバ/クライアント

void main() 
{ 
cout << "Server Running" << endl; 
TcpListener listener; 
SocketSelector selector; 
bool done = false; 
vector<TcpSocket*>clients; 
listener.getLocalPort(); 
listener.listen(2000); 
selector.add(listener); 

while (!done) 
{ 
    if (selector.wait()) 
    { 
     if (selector.isReady(listener)) 
     { 
      TcpSocket *socket = new TcpSocket; 

      listener.accept(*socket); 
      Packet packet; 
      string id; 
      string status; 
      if (socket->receive(packet) == Socket::Done) 
       packet >> id>>status; 
      cout << id << " has "<<status; 
      clients.push_back(socket); 
      selector.add(*socket); 
     } 
     else 
     { 
      for (int i = 0;i < clients.size();i++) 
      { 
       if (selector.isReady(*clients[i])) 
       { 
        Packet packet, sendpacket; 
        if (clients[i]->receive(packet) == Socket::Done) 
        { 
         string text; 
         packet >> text; 
         sendpacket << text; 
         for (int j = 0;j < clients.size();j++) 
         { 
          if (i != j) 
          { 
           clients[j]->send(sendpacket); 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

for (vector<TcpSocket*>::iterator it = clients.begin();it != clients.end();it++) 
    delete *it; 
} 

コード:

....しかし、問題は私のラップトップ上のクライアントプログラムは、私のPC上でサーバープログラムに接続していないということです....ここでは、サーバのためのコードです
#include<SFML/Network.hpp> 
#include<SFML/Graphics.hpp> 
#include<iostream> 
#include<string> 
#include<vector> 
#include<conio.h> 

using namespace sf; 
using namespace std; 

void main() 
{ 
IpAddress ip = IpAddress::getLocalAddress(); 
cout << ip << endl; 

TcpSocket socket; 
bool done = false; 

string id; 
string status = "connected"; 
string text = ""; 

cout << "Enter online id: "; 
cin >> id; 

socket.connect(ip, 2000); 

Packet packet; 

packet << id<< status; 
socket.send(packet); 
socket.setBlocking(false); 

RenderWindow window(VideoMode(800, 600, 32), id); 
vector<Text> chat; 

Font font; 
font.loadFromFile("Data/font.ttf"); 

while (window.isOpen()) 
{ 
    Event event; 
    while (window.pollEvent(event)) 
    { 
     switch (event.type) 
     { 
     case Event::Closed: 
      window.close(); 
      break; 
     case Event::KeyPressed: 
      if (event.key.code == Keyboard::Escape) 
      { 
       text.clear(); 
      }    
      else if (event.key.code == Keyboard::Return) 
      { 
       Packet packet; 
       packet << id + ":" + text; 
       socket.send(packet); 
       Text displaytext(text, font, 20); 
       displaytext.setColor(Color::Green); 
       chat.push_back(displaytext); 
       text = ""; 
      } 
      break; 
     case Event::TextEntered: 
      if (event.text.unicode == '\b' && text.size() >0) 
      { 
       text.erase(text.size() - 1, 1); 
      } 
      else 
      text += event.text.unicode; 
      break; 
     } 
    } 

    Packet packet; 
    socket.receive(packet); 
    string temptext; 
    if (packet >> temptext) 
    { 
     Text displaytext(temptext, font, 20); 
     displaytext.setColor(Color::Blue); 
     chat.push_back(displaytext); 
    } 
    int i = 0; 
    for (i;i<chat.size();i++) 
    { 
     chat[i].setPosition(0, i * 20); 
     window.draw(chat[i]); 
    } 

    Text drawtext(text, font, 20); 
    drawtext.setColor(Color::Red); 
    drawtext.setPosition(0, i * 20); 
    window.draw(drawtext); 

    window.display(); 
    window.clear(); 
} 

} 

ラップトップクライアントがサーバー(PC)を見つけて接続する方法を知る必要がありますか?

答えて

0

サーバーのIPアドレスを取得する必要があります。現在、クライアントIPアドレスをクライアントに供給していますが、これは動作しません。

まずは、それを見てハードコードすることができますが、長期的に見ると、よりダイナミックにする方法を見つける必要があります。

もう1つのこと:void main()というものはありません。それは未定義の振る舞いで、それを取り除く。有効なエントリポイントを使用します。おそらくint main()を使用します。

+0

助けてくれてありがとう、今私は間違っていることを理解しています.......あなたは私がサーバーのIPに到達するためにクライアントを作る方法を教えてください。リクエスト)...いくつかのコード例が役立ちます.... –