Re: [問題] Socket Inputstream

作者: LaPass (LaPass)   2016-05-13 11:15:46
關鍵是你必須要開新執行緒去處理socket讀寫的動作
概念上是,有一條執行緒給ServerSocket專門做接受連線的動作
另外的執行緒專門對socket進行讀寫
寫出來的code應該會長的像這樣
class 讀寫socket的物件 imp...忘了怎麼拼 Runnable{
Socket socket;
讀寫socket的物件(Socket socket){this.socket=socket;}
public void run(){
//TODO 對socket讀寫的動作copy到這裡
}
}
while(true){
serverSocket = new ServerSocket(1234);
socket = serverSocket.accept();
new Thread(new 讀寫socket的物件(socket)).start();
}
※ 引述《yoyojackson (JiSon)》之銘言:
: 我的Server Socket連上線並取得Inputstream後
: 第一次read()讀取時有等待輸入流的資料
: 也有成功讀取到client送來的資料
: 但是第二次read卻沒等待 直接記續往下執行 無法收到資料
: 怎麼試都不行
: code如下
: try
: {
: serverSocket = new ServerSocket(1234);
: socket = serverSocket.accept();
: System.out.println("Connceted");
: is = socket.getInputStream();
: while(true)
: {
: byte[] data = new byte[4096];
: Integer i = is.read(data,0,4096);
: if(i>=0)
: {
: command = new String(data,0,i);
: if(command.equals("Shutdown"))shut();
: if(command.equals("Restart"))re();
: }else {}
: }
: ////////////////////////////////////////////////////////
: }
: catch(Exception ex)
: {
: System.out.println(ex.toString());
: }
作者: ah7675 (阿毛)   2016-05-14 02:00:00
Java沒有select這種東西可以用嗎?
作者: LaPass (LaPass)   2016-05-14 16:54:00
有,要用那個也可以。
作者: yoyojackson (JiSon)   2016-05-15 23:21:00
請問accept放在迴圈裡那這樣代表client端也必須要不停的發送連線需求嗎
作者: angelina877 (牛牛)   2016-06-20 22:58:00
原來這裡有文 我明天再來研究

Links booklink

Contact Us: admin [ a t ] ucptt.com