私は、DXライブラリのTCP通信を用いて接続の確認をしようと思いまして、プログラムを組んでみたのですが、
ほかのパソコンからの接続を確認できません。
自分のパソコンからの接続は確認しております。
また、ポート開放についてなのですが、某オンラインゲームのサーバーのポート開放などはできるのですが、
自分が作ったものはポート開放がうまくいきません。
ソースは、http://homepage2.nifty.com/natupaji/DxL ... html#R13N1こちらを参考にさせていただきました。
接続側
KeyInput(テキストボックスのようなもの)にIPアドレスを入力し、'.'ごとに分けIPアドレスとして変換し接続しています。
TCHAR buf[15] = "";
GetKeyInputString(buf, network.inputhandle);
vector<string> ips = split(buf, '.');
network.Ip.d1 = atoi(ips.at(0).c_str());
network.Ip.d2 = atoi(ips.at(1).c_str());
network.Ip.d3 = atoi(ips.at(2).c_str());
network.Ip.d4 = atoi(ips.at(3).c_str());
DeleteKeyInput(network.inputhandle);
network.NetHandle = ConnectNetWork(network.Ip, PORT); //PORT = ポート番号
if (network.NetHandle != -1){
NetWorkSend(network.NetHandle, p, sizeof(Player)); //ホストに必要データを送信
network.connect = true; //接続には関係ない処理
network.nb.active = false;
}
else{ //接続に失敗した場合、もう一度入力できるようにする
network.inputhandle = MakeKeyInput(15, FALSE, FALSE, FALSE);
}
//①一回だけする処理
PreparationListenNetWork(PORT);
//②繰り返しする処理
void NetWork_Recieve(){
if (nhandle < 4){
int nethandle = GetNewAcceptNetWork(); //コンピュータの接続を取得
if (nethandle != -1){ //接続されていたら
NetHandles[nhandle] = nethandle; //ネットワークハンドルを保存
GetNetWorkIP(NetHandles[nhandle], &Ips[nhandle]); //接続先のIPを取得
// データが送られて来るまで待つ
while (!ProcessMessage())
{
// 取得していない受信データ量が0以外のときはループから抜ける
if (GetNetWorkDataLength(NetHandles[nhandle]) != 0) break;
}
NetWorkRecv(NetHandles[nhandle], &players[nhandle],sizeof(Player)); //必要データの受け取り
nhandle++;
ps++;
}
}
//切断されたときの処理(ここは無視しても良いかと思われます。
int lost = GetLostNetWork();
if (lost != -1){
for (int i = 0; i < 4; i++){
if (NetHandles[i] == lost){
if (i == 3){
NetHandles[i] = -1;
Ips[i] = IPDATA();
}
else{
for (int j = i; j < 4; j++){
NetHandles[j] = NetHandles[j + 1];
Ips[j] = Ips[j + 1];
}
}
ps--;
}
}
}
}
ソースコードがスパゲッティになっていたり、通信にまったく関係のない処理が接続や受信部分に混じっているので、
大変ややこしい表記になってしまい申し訳ございません。
ソースコードは、すべて載せるのがマナーかと思いますが、少しでも混乱をさけるためにこのような処置をしました。
送信側は、コメントに書いてあるとおり 入力したIPアドレスに接続をするものとなっております。
受信側は、①が一回だけ呼び出され、②が外部にある(このソースコードには載っていない)終了条件が真になるまで繰り返されるものと
なっております。
自分のパソコンでの接続は確認できました。(ポート開放がいらないからと思われます。
他人のパソコンからの接続は確認できませんでした。(ポート開放ができてないからかと思われます。
ほかの方が作ったオンラインゲームのポート開放は成功してあります。(確認サイトで確認済み。
自分が作ったもの(上記のコードを使ってあるもの)のポート開放は失敗してしまいます。(確認サイトで確認済み。
ずらずらと長文を書いてしまいましたが、要は「自分が作ったアプリだとポート開放がうまくいかない。」ということです。
ポート番号の変更などいろいろ試してみましたが、通信関係には初めて手をつけるので、見落としている点があるかもしれません。
よろしければ、ご教示ください。