2016-05-16 162 views
0

我刚开始学习SFML网络....我正在制作一个服务器客户端聊天室...当我在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; 
} 

代码:

#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地址提供给客户端,这是行不通的。对于初学者来说,您可以查看它并对其进行硬编码,但从长远来看,您需要找到一种更具动态性的方法。

还有最后一件事:没有void main()这样的东西。这是未定义的行为,摆脱它。使用有效的入口点,最有可能您想使用int main()

+0

感谢您的帮助,现在我明白我在做什么错了.......你可以请进一步指导我如何让客户端到服务器的IP(我怎么能伸手去服务器请求)...一些代码示例可以帮助.... –

相关问题