论坛首页 Java企业应用论坛

Thread,Socket从头开始

浏览 8313 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-13  
在网上看了很多关于Thread和Socket的资料,项目中也用到不少,但是都是比较简单,或者是用一些现成的,现在想从头开始,慢慢的再学习。希望能和各位前辈进行交流。接触的需求好多一开始比较简单,后来就慢慢复杂了,我想这个学的过程也是,先来个简单的,然后再慢慢的进行完善。好了,不废话了。
场景:客户端将键盘输入的字符通过socket发送到服务端,当输入的字符为“exit”时,程序退出,服务端仅仅将接收到的信息打印出来。
服务端代码:
   
public class SocketServer extends Thread{  
      
        private java.net.ServerSocket ss;  
        private java.net.Socket s;  
        @Override  
        public void run() {  
            try{  
                while(true){  
                    this.s=this.ss.accept();  
                    java.io.BufferedReader reader =  
                        new BufferedReader(  
                                new java.io.InputStreamReader(  
                                        s.getInputStream()));  
                    String str=reader.readLine();  
                    System.out.println("开始接受数据:");  
                    while(str!=null){  
                        System.out.println("读了一行");  
                        System.out.println(str);  
                        str=reader.readLine();  
                    }  
                    reader.close();  
                    this.s.close();  
                }  
            }catch(Exception ex){  
                ex.printStackTrace();  
            }  
        }  
        public SocketServer(int port){  
            try{  
                System.out.println("服务端启动.......");  
                this.ss=new ServerSocket(port);  
            }catch(Exception ex){  
                ex.printStackTrace();  
            }  
        }  
        public static void main(String[] args){  
            Thread t=new SocketServer(8888);  
            t.start();  
        }  
    }  

客户端的代码:
   
public class SocketClient{  
        public static void main(String[] args)throws Exception {  
            java.net.Socket s=new java.net.Socket("127.0.0.1",8888);  
            java.io.BufferedWriter out=new java.io.BufferedWriter(  
                    new java.io.OutputStreamWriter(  
                            new java.io.BufferedOutputStream(s.getOutputStream())));  
              
            java.io.BufferedReader reader=new BufferedReader(  
                    new java.io.InputStreamReader(System.in));  
              
            String str=reader.readLine();  
            while(!"exit".equals(str)){  
                out.write(str + "\n");  
                out.flush();  
                str=reader.readLine();  
            }  
            reader.close();  
            out.close();  
        }  
    }  
   发表时间:2010-12-13  
下一步准备把客户端发送改为多线程发送,并采用线程池的方式,希望各位多提提意见。
0 请登录后投票
   发表时间:2010-12-14  
其实我有一特2的问题:
假如机器上装了8个网卡,用了16家ISP的网络服务,有没有程序能把这些透明化呢?就是好像我只有一个网卡,一家服务一样?
0 请登录后投票
   发表时间:2010-12-14  
用mina啊,虽然我也不怎么熟悉,但是不错
0 请登录后投票
   发表时间:2010-12-14  
狂汗。。。。。。。又在看书了吧,还是写在伯克利比较合适
0 请登录后投票
   发表时间:2010-12-14  
关键是服务端,你服务端对请求的处理会阻塞其它客户端的请求,如果这个处理稍微耗时,多个客户端的情况下,问题就出来了
你下一步应该是改服务端,继续学习吧
0 请登录后投票
   发表时间:2010-12-14  
其实你应该写个NIO的,再配上多任务线程.. 算是现在效率比较好的
0 请登录后投票
   发表时间:2010-12-14  
现在NIO和IO不是一回事吗?
0 请登录后投票
   发表时间:2010-12-15  
nakupanda 写道
现在NIO和IO不是一回事吗?

NIO 是非阻塞IO操作 IO是阻塞的 NIO在效率上讲要比IO的高
0 请登录后投票
   发表时间:2010-12-15  
cwd306972384 写道
下一步准备把客户端发送改为多线程发送,并采用线程池的方式,希望各位多提提意见。


用不用线程池到无所谓,希望楼主在多线程同步上给出精彩的代码。一直想知道在java上是如何实现多路分离,以及串行化操作的?

ps:由于被扣分,为了回这个贴,又做了一次论坛测试。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics