作者 主題: 在后台开启端口自动关闭问题  (閱讀 3904 次)

0 會員 與 1 訪客 正在閱讀本文。

van416

  • 懷疑的國中生
  • **
  • 文章數: 48
    • 檢視個人資料
在后台开启端口自动关闭问题
« 於: 2012-06-09 12:00 »
我用自己的程式 java -jar s.jar & 打开了一个端口9001
处于listen状态
代碼: [選擇]
[root@localhost server]# netstat -tlan | grep 9001
tcp        0      0 :::9001                     :::*                        LISTEN 

[root@localhost server]# jobs
[1]+  Running                 java -jar s.jar &

如果客户端在使用这个端口,就OK,
如果客户端没有使用这个端口,好像就会直接关闭这个端口,这是为什么啊。命令要怎么用才能让这个端口一直开启啊。谢谢



redjack

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
Re: 在后台开启端口自动关闭问题
« 回覆 #1 於: 2012-06-09 17:33 »
這應該是程式的關係吧。
我之前寫的PYTHON 小server 一開始也是如此 ( 先做出一個可以溝通指令的東西),後續加上thread 來做才OK的 ( 持續運作與支持多客戶端)
就看成是一個http server, 客戶端終止連線不代表整個process 的結束.
Knowledge is Power

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17475
    • 檢視個人資料
    • http://www.study-area.org
Re: 在后台开启端口自动关闭问题
« 回覆 #2 於: 2012-06-09 22:09 »
給 xinetd 處理如何?

HaWay

  • 大隻佬!
  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 3980
    • 檢視個人資料
Re: 在后台开启端口自动关闭问题
« 回覆 #3 於: 2012-06-10 23:04 »
你有沒有做 fork ??
我做人那麼 nice, 肯定有什麼誤會.....

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com
Re: 在后台开启端口自动关闭问题
« 回覆 #4 於: 2012-09-04 12:42 »
我用自己的程式 java -jar s.jar & 打开了一个端口9001
处于listen状态
代碼: [選擇]
[root@localhost server]# netstat -tlan | grep 9001
tcp        0      0 :::9001                     :::*                        LISTEN 

[root@localhost server]# jobs
[1]+  Running                 java -jar s.jar &

如果客户端在使用这个端口,就OK,
如果客户端没有使用这个端口,好像就会直接关闭这个端口,这是为什么啊。命令要怎么用才能让这个端口一直开启啊。谢谢

你是做 同步 IO ? 異步 IO?  ACCEPT 底下有迴路在跑嗎?

假設你使用 同步或異步 , 而且你知道 ACCEPT 底下要做 迴路.

我想這應該是常識 , 樓主應該觀念沒差到這種程度.

假設你都懂 那這問題 就跟 FORK 或 THREAD 沒有太大的關係.


#####


好久沒用 JAVA 了.... @@ 老實說 我討厭 JAVA 在網路層的執行效能和處理速度.

大多我都用在 應用層和展示層 , 比較底層的應用 , 我通常都拒絕使用它.

利用 Socket.setSoTimeout(expiredTime) 搭配 Socket.setKeepAlive(true)

再試看看吧.

1. setKeepAlive :
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html#getKeepAlive%28%29

2. setSoTimeout :
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html#getSoTimeout%28%29

3. connect :   ( 第二個參數 )
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html#connect%28java.net.SocketAddress,%20int%29



如果試了還有問題 , 再試試 物件裡 其它 參數.

http://docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html


PS :

這問題非常直覺得看完 API 手冊就可以試出問題了.

JAVA 的 API 手冊 要常看 , 常用 , 常實驗 , JAVA 的物件庫很強大 , 慣壞很多人......

但是它的開發速度真的很省時....

要常玩玩 API 手冊裡每一個 物件裡的參數 使用上會有什麼效果.



« 上次編輯: 2012-09-04 13:04 由 FIEND »
你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......