2010-01-23 42 views
1

我编写了一个应侦听端口80和81的套接字侦听器,并且当数据到达这些端口时对这些数据执行操作。我希望这个监听器能够同时监听这两个端口,并用以下方式编码。执行线程的Java套接字

import java.net.*; 
    import java.io.*; 
    import java.text.DateFormat; 
    import java.text.SimpleDateFormat; 

    public class MultipleSocketServer implements Runnable { 

    private int a; 
    private ServerSocket connection; 
    private String TimeStamp; 
    private int ID; 
public static void main(String[] args){ 

     // System.out.print("ip"); 
    // String gh="12345"; 
     //System.out.println(gh.substring(1,3)); 
    int port = 80; 
    int port1 = 81; 
    int count = 0; 
    double a=234.52121; 

    //System.out.println(bf3.toString()); 
    try{ 

     ServerSocket socket1 = new ServerSocket(port); 
     ServerSocket socket2=new ServerSocket(port1); 
     System.out.println("MultipleSocketServer Initialized"); 
     Runnable runnable = new MultipleSocketServer(socket1, ++count); 
     Runnable run = new MultipleSocketServer(socket2, ++count); 
     Thread thread = new Thread(runnable); 
     Thread thread1 = new Thread(run); 
     while (true) { 
     //Socket connection = socket1.accept(); 

     thread.start(); 
     thread1.start(); 
     } 
    } 

    catch (Exception e) {} 
    } 
MultipleSocketServer(ServerSocket s, int i) { 
    this.connection = s; 
    this.ID = i; 
} 
public void run() { 
    while(true){ 


    try { 
     Socket incoming=connection.accept(); 


      BufferedInputStream is = new BufferedInputStream(incoming.getInputStream()); 
      int character; 
    while((character = is.read())!=-1) { 
    . 
    . 
    do the input data handling here 
    . 
    . 

    } 
    } 
    catch(Exception e){} 
    } 
    } 
} 

但由于某种原因,这似乎并没有显示线程/并发行为。 我正在使用超级终端测试此代码,并且每次我从超级终端断开时,程序执行都会停止并引发“套接字关闭”异常。

任何指针将有很大的帮助

干杯

回答

1

你死循环启动线程。

while (true) { 
    //Socket connection = socket1.accept(); 
    thread.start(); 
    thread1.start(); 
} 

我认为,虽然,这是处理(忽略)在

} catch (Exception e) {} 

不过,我怀疑你描述的问题是在处理代码,你不包括。一个非常明显的想法:你不打电话connection.close()而不是incoming.close(),你呢?

+0

@sfussenegger:谢谢你,你是一个救生员。与此同时,我不相信我一直呆在什么地方。 :D 对代码结构进行多次更改的结果,我猜:) – ping 2010-01-23 09:14:46