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