serversocket&clientsocket 無法連線 |
尚未結案
|
realdudan
一般會員 發表:1 回覆:3 積分:0 註冊:2011-11-03 發送簡訊給我 |
這是我自己練習的聊天小程式,把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;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;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;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 發送簡訊給我 |
你好,
可否也使用一下我的範例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 發送簡訊給我 |
|
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
1.兩台電腦能互相Ping到嗎???
2.你是否有裝其他的防毒軟體??? 3.虛擬IP????實體IP???? 你是說電信業者配發的IP嗎????如果是,那Router那邊要導阿!!! ===================引 用 realdudan 文 章=================== 您好,我試過範例程式,還是一樣在自己電腦開可以連線,但是兩台電腦無法連線,不知道我的問題出在哪囧 抱歉也想請問個問題,我在自己電腦內開兩個程序連線,如果是用虛擬ip沒問題,但是用實體ip就不行了,請問是為什麼?是因為實體ip只能對外連嗎? |
realdudan
一般會員 發表:1 回覆:3 積分:0 註冊:2011-11-03 發送簡訊給我 |
|
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
|
realdudan
一般會員 發表:1 回覆:3 積分:0 註冊:2011-11-03 發送簡訊給我 |
|
Victor4022
中階會員 發表:0 回覆:76 積分:90 註冊:2011-02-20 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
你好,
依我的猜測,你說:「但是不同電腦就無法連線」因該是有透過網際網路吧? 比如說一個在台北,一個在高雄。 如果是上面的情形,那肯定是你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, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |