注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淡忘邻人

二十七,始发愤

 
 
 

日志

 
 
 
 

Socket编程,ServerSocket  

2010-11-13 14:55:09|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
以上是Socket编程,ServerSocket在项目里没有用到,但是我也写了个包装类供参考
Java代码
  • package com.sse.monitor.serv; 
  • import java.io.IOException;  
  • import java.net.ServerSocket;  
  • import java.net.Socket;  
  •   
  • /** 
  •  * 服务器套接字工厂 
  •  * Copyright: Copyright (c) 2008 
  •  * @author cuishen 
  •  * @version 1.0 
  •  */  
  • public class ServerSocketFactory {  
  •     private static ServerSocket server;  
  •     private static Socket client;  
  •     private boolean ifRunServer = true;  
  •       
  •     public void runServer(int port) throws IOException {  
  •         //本地建立一个套接字服务器,等待其他机器访问  
  •         server = new ServerSocket(port);  
  •         System.out.println("Socket Server Start...");  
  •         new ServerThread();  
  •     }  
  •       
  •   
  •     class ServerThread implements Runnable {  
  •         Thread t;  
  •           
  •         public ServerThread() {  
  •             t = new Thread(this);  
  •             t.start();  
  •         }  
  •   
  •         public void run() {  
  •             try {  
  •                 while(ifRunServer) {  
  •                     if(client == null) client = server.accept();  
  •                     if(client != null//getMessage();  
  •                     Thread.sleep(ReadConfig.serverThreadSleep);  
  •                 }  
  •             } catch (InterruptedException e) {  
  •                 e.printStackTrace();  
  •             }   
  •             catch (IOException e) {  
  •                 e.printStackTrace();  
  •             }  
  •         }  
  •         public void stopThread() {  
  •             try {  
  •                 ifRunServer = false;  
  •                 this.t.join(100);  
  •             } catch (InterruptedException ex) {  
  •                 System.out.println("socket服务器线程终止异常!!!");  
  •             } finally {  
  •                 t = null;  
  •             }  
  •         }  
  •     }  
  • }  
  • package com.sse.monitor.serv;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 服务器套接字工厂
     * Copyright: Copyright (c) 2008
     * @author cuishen
     * @version 1.0
     */
    public class ServerSocketFactory {
    	private static ServerSocket server;
    	private static Socket client;
    	private boolean ifRunServer = true;
    	
    	public void runServer(int port) throws IOException {
    		//本地建立一个套接字服务器,等待其他机器访问
    		server = new ServerSocket(port);
    		System.out.println("Socket Server Start...");
    		new ServerThread();
    	}
    	
    
    	class ServerThread implements Runnable {
    		Thread t;
    	    
    		public ServerThread() {
    	        t = new Thread(this);
    	        t.start();
    	    }
    
    	    public void run() {
    	        try {
    	            while(ifRunServer) {
    	            	if(client == null) client = server.accept();
    	            	if(client != null) //getMessage();
    	                Thread.sleep(ReadConfig.serverThreadSleep);
    	            }
    	        } catch (InterruptedException e) {
    	            e.printStackTrace();
    	        } 
    	    	catch (IOException e) {
    				e.printStackTrace();
    			}
    	    }
    	    public void stopThread() {
    	        try {
    	        	ifRunServer = false;
    	        	this.t.join(100);
    	        } catch (InterruptedException ex) {
    	            System.out.println("socket服务器线程终止异常!!!");
    	        } finally {
    	        	t = null;
    	        }
    	    }
    	}
    }
    
    Socket编程就是运用Socket或者ServerSocket类搭配线程来使用(由于TCP/IP属于可靠性传输,不会丢包)。可能会因为 在发送请求或者接受消息时Socket阻塞而导致主线程挂死,因此发送请求、接收消息的方法要放进子线程里处理;对于同一目标ip和端口,在同一个子线程 里只能new一个Socket,也就是说,要对同一地址建立多条连接,就要开启多个线程。而且注意连接可能会因作用不同分长连接和短连接,要分别处理,本 项目中发送请求和接受message就分别属于短连接和长连接,因此分别开发了RequestSocketThread和 GetMessageSocketThread两个子线程区分对待。可以同时开发个Message类来封装打包和解包消息的方法(项目中开发 MessageFactory.java),方便调用
      评论这张
     
    阅读(227)| 评论(0)
    推荐 转载

    历史上的今天

    评论

    <#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    页脚

    网易公司版权所有 ©1997-2017