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