線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4004
推到 Plurk!
推到 Facebook!

serversocket&clientsocket 無法連線

尚未結案
realdudan
一般會員


發表:1
回覆:3
積分:0
註冊:2011-11-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-11-03 00:28:29 IP:114.35.xxx.xxx 訂閱
這是我自己練習的聊天小程式,把server&client寫在同一個程序,由勾選兩個checkbox(listen及connect)中的一

個來選擇要當server還是client。

目前問題是:在同一台電腦開兩個程序能正常連線,但是不同電腦就無法連線,我server&client的port都設8888

了,也確定兩台電腦都有關防火牆,請問還有什麼因素會導致無法連線?想了好久不知問題所在,請高手幫忙!!

感謝!!

#include
#pragma hdrstop
#include "socket2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::listenClick(TObject *Sender)
{
if(ServerSocket1->Active)
{
ServerSocket1->Active=false;
listen->Checked=false;
StatusBar1->Panels->Items[0]->Text="";
}
else
{
ServerSocket1->Active=true;
listen->Checked=true;
ClientSocket1->Active=false;
StatusBar1->Panels->Items[0]->Text="監聽..." ;
}
connect->Enabled=!(listen->Checked);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket)
{
int i;
AnsiString str1="服務器消息:" Socket->RemoteHost "加入";
for(i=0;iSocket->ActiveConnections;i )
ServerSocket1->Socket->Connections[i]->SendText("服務器消息:" Socket->RemoteHost "加入");
StatusBar1->Panels->Items[0]->Text=str1;
mmtalk->Lines->Add(str1);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString str1=Socket->ReceiveText();
mmtalk->Lines->Add(str1);
int i;
for(i=0;iSocket->ActiveConnections;i )
ServerSocket1->Socket->Connections[i]->SendText(str1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::connectClick(TObject *Sender)
{
if(ClientSocket1->Active)
{
ClientSocket1->Active=false;
connect->Checked =false;
}
else
{
AnsiString Server;
if(InputQuery("連接","請輸入要連接的主機地址:",Server))
{
ClientSocket1->Address=Server;
ClientSocket1->Active=true;
connect->Checked =true;
}
}
listen->Enabled=!(connect->Checked);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->Panels->Items[0]->Text ="連接到主機:" Socket->RemoteHost;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::talkKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==13)
{
mmtalk->Lines->Add(name->Text ":" talk->Text);
if(listen->Checked==true)
{
int i;
for(i=0;iSocket->ActiveConnections;i )
ServerSocket1->Socket->Connections[i]->SendText(name->Text ":" talk->Text);
}
else
{
ClientSocket1->Socket->SendText(name->Text ":" talk->Text);
}
talk->Text="";
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::mmtalkChange(TObject *Sender)
{
if(mmtalk->Lines->Count>=100)mmtalk->Lines->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
mmtalk->Lines->Add(Socket->ReceiveText());

int i=mmtalk->Lines->Count-1;
if(mmtalk->Lines->Strings[i]==mmtalk->Lines->Strings[i-1])
mmtalk->Lines->Delete(i);
}
//---------------------------------------------------------------------------

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-11-03 00:37:40 IP:122.126.xxx.xxx 訂閱
你好,

可否也使用一下我的範例exe檔到你的二台pc上run看看,看是否可以連線?

http://delphi.ktop.com.tw/board.php?cid=169&fid=973&tid=103460
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2011-11-02 10:38:18, 註解 無‧
realdudan
一般會員


發表:1
回覆:3
積分:0
註冊:2011-11-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-11-03 14:30:30 IP:114.35.xxx.xxx 訂閱
您好,我試過範例程式,還是一樣在自己電腦開可以連線,但是兩台電腦無法連線,不知道我的問題出在哪囧

抱歉也想請問個問題,我在自己電腦內開兩個程序連線,如果是用虛擬ip沒問題,但是用實體ip就不行了,請問是為什麼?是因為實體ip只能對外連嗎?
編輯記錄
realdudan 重新編輯於 2011-11-03 00:31:12, 註解 無‧
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-11-03 19:23:43 IP:211.23.xxx.xxx 訂閱
1.兩台電腦能互相Ping到嗎???
2.你是否有裝其他的防毒軟體???
3.虛擬IP????實體IP???? 你是說電信業者配發的IP嗎????如果是,那Router那邊要導阿!!!

===================引 用 realdudan 文 章===================
您好,我試過範例程式,還是一樣在自己電腦開可以連線,但是兩台電腦無法連線,不知道我的問題出在哪囧

抱歉也想請問個問題,我在自己電腦內開兩個程序連線,如果是用虛擬ip沒問題,但是用實體ip就不行了,請問是為什麼?是因為實體ip只能對外連嗎?
realdudan
一般會員


發表:1
回覆:3
積分:0
註冊:2011-11-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-11-04 00:09:30 IP:114.35.xxx.xxx 訂閱
你好,發現我跟對方無法互ping,請問這種情形該怎麼解決?
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-11-04 00:38:45 IP:60.248.xxx.xxx 訂閱
辦法有好多,給你兩個

1.兩台電腦擺在一起,要並排喔!!!
2.回學校找老師把他臭罵一頓!!!然後去總務處把你歷年繳交的學費討回來!!!

===================引 用 realdudan 文 章===================
你好,發現我跟對方無法互ping,請問這種情形該怎麼解決?
realdudan
一般會員


發表:1
回覆:3
積分:0
註冊:2011-11-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-11-04 08:18:44 IP:114.35.xxx.xxx 訂閱
不好意思,我知道這種問題很初級,但是我本科不是資訊類的,只是自己想寫寫小程式而已,所以.......恩。
Victor4022
中階會員


發表:0
回覆:76
積分:90
註冊:2011-02-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-11-04 09:40:29 IP:114.34.xxx.xxx 訂閱
請別氣餒,有可能是實體網路設定的問題,想確定這種問題,拿個 hub 把兩台電腦串成獨立封閉網路環境,試看看不難找到問題。

ping 不到對方電腦, ping 自己的 ip 看看吧,但別 ping rollback ip。
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-11-04 15:09:02 IP:122.126.xxx.xxx 訂閱
你好,

依我的猜測,你說:「但是不同電腦就無法連線」因該是有透過網際網路吧? 比如說一個在台北,一個在高雄。

如果是上面的情形,那肯定是你server端那裡的ip分享器設定的問題。以上例來說,若你住台北。朋友住高雄。
那你要開 server ,並且在你的ip分享器上開一個虛擬伺服器的設定 (裡面就是你自己的區域ip與port的設定)

然後你朋友要是client端,但他要輸入的ip是你的 真實ip。

一切的關鍵在你要知道如何設定 虛擬伺服器。 若真需要幫忙的話,就把你家的分享器的型號說出來,也許可以幫你看一下如何設定!



註:若你真的指的是同一個區網內的2台無法連。八如你家中的,a台與b台二台無法連。那我個人的經驗,幾乎是因為你們二台都裝了「防毒軟體」,許防毒軟體現在其實不僅防毒,也經常管理防火的。但要再注意一件事,經常的,你就算把防毒關了,他其實還是沒作用的。所以,在很必要的情形下,要把它移除! (windows內建防火你說關了對吧?!)
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2011-11-04 01:14:24, 註解 無‧
系統時間:2024-12-04 2:09:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!