作者vity (逍遙盃-佛得)
看板java
標題[問題] Server端ServerSocket 的accept()
時間Fri Sep 30 12:22:31 2011
大家好
我想讓server端能回應client端
但是server端ServerSocket的accept方法會當掉
不知道該怎麼解決...
我用本機開啟server與client時
client程式不會當掉,
換另一台電腦去呼叫server時,
server和client都會當掉
檢查過port, 也試過關防毒軟體
client程式碼如下(我寫在actionPerformed裡)
byte buff[]=new byte[1024];
try
{
txa.append("Connect to Server");
Socket s=new Socket("140.113.59.165",11000);
txa.append("Connection construced");
InputStream in=s.getInputStream();
int n=in.read(buff);
txa.append("received from server");
txa.append(new String(buff,0,n));
in.close();
s.close();
}
catch(Exception ex)
{
txa.append(e+"happen");
}
server程式碼如下(同樣寫在actionPerformed)
try
{
ServerSocket svs=new ServerSocket(11000);
txa.append("wait for client's request");
Socket s=svs.accept(); //這行出現開始會當掉
txa.append("Connecting");
txa.append("Sending");
OutputStream out=s.getOutputStream();
String str="GOGOGO";
out.write(str.getBytes());
out.close();
s.close();
txa.append("Completed");
}
catch(Exception ex)
{
txa.append(e+"happen");
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.59.165
1F:推 LaPass:有印出什麼東西嗎? 09/30 12:49
又要謝謝你~client是直接連不上, server會印出第一行 wait for client's request
然後就當掉
※ 編輯: vity 來自: 140.113.59.165 (09/30 13:12)
※ 編輯: vity 來自: 140.113.59.165 (09/30 13:12)
2F:推 LaPass:可能沒當掉,只是一直卡在accept那邊等連線進來而已... = = 09/30 13:39
但是連不進去...冏
3F:→ laiis:改用 nio 來寫就不會 block 了... 09/30 13:56
※ 編輯: vity 來自: 140.113.59.165 (09/30 14:15)
4F:推 PsMonkey:你先確定一下實體網路的設定問題,說不定 IP 根本就..... 09/30 14:47
5F:推 LaPass:嗯.... 換區網的IP試試看..... 09/30 14:55
6F:推 LaPass:換127.0.0.1試試看也可以 09/30 16:36
本機也不行...真的不知道為什麼
※ 編輯: vity 來自: 140.113.59.165 (09/30 19:54)
我用netstat -nao去檢查
發現我開的port 是出現在
協定 本機位址 外部位址 狀態 PID_#
TCP [ : : ]: 11000 [ : : ]:0 Listening (是我javaw的process沒錯)
為何是開在這? 是這個的問題嗎?
開在140.113.59.165 或是127.0.0.1
例如[140.113.59.165:11000] 感覺比較對?...要怎麼改呢
※ 編輯: vity 來自: 140.113.59.165 (09/30 20:27)
7F:→ LaPass:沒遇過.... 我區網/本機/網際網路/android模擬器通通連很順 09/30 21:07
8F:推 jackzzkao:有可能是 blocking 10/01 03:48
問題解決了, 回來說明一下解決過程
原本是用awt寫的, 改成用console後發現一切正常, 可傳資料
於是用console的server對awt的client =>不行
用console的client對 awt的server =>可以
推論:awt的client有問題
果然在將frame弄成物件時叫成別的class的
經修正可連線, 謝謝大家的幫忙,
最大的問題不是電腦 不是網路 是我啊@@
※ 編輯: vity 來自: 140.113.59.165 (10/01 16:23)
9F:推 LaPass:沒過用awt.... 這還真是神奇的狀況..... 10/01 17:02
10F:→ sbrhsieh:樓上會錯意了,這跟 AWT 無關。 10/01 20:29
11F:→ PsMonkey:弄個 thread 就可以了吧? 10/01 21:37