码迷,mamicode.com
首页 > 其他好文 > 详细

socket 开发一

时间:2016-09-03 15:02:09      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

其实web 开发的底层就是socket 编程

数据是通过流读取

服务端

public class WeatherServer {
    public static void main(String[] args) throws IOException {
        // 创建socket 服务,应用服务端口建议在1万以上
        ServerSocket server = null;
        Socket socket = null;
        DataInputStream di=null ;
        DataOutputStream ds=null ;
        try {
            server = new ServerSocket(12345);
            // 按受客户端链接
            socket = server.accept();
            //为了好处理字符串
            // 接受客户端请求
            di=new DataInputStream(socket.getInputStream());
            // 向服务端发送请求
            ds=new DataOutputStream(socket.getOutputStream());
            //客户端向服务端发送的天气所在城市
            String cityName =di.readUTF();
            System.out.println("from client...."+cityName);
            //服务端向客户端返回天气情况
            String result ="晴";
            ds.writeUTF("晴");
            System.out.println("to client...."+result);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            di.close();
            ds.close();
            //服务端一般是不关闭资源的,由客户端关闭
            //socket.close();
        }
        
        
    }

}

客户端代码:

public class WeatherClient {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket client = null;
        DataInputStream di = null;
        DataOutputStream ds = null;
        client = new Socket("127.0.0.1", 12345);
        try {
            
            // 接受客户端请求
            di = new DataInputStream(client.getInputStream());
            // 向服务端发送请求
            ds = new DataOutputStream(client.getOutputStream());
            String cityName ="北京";
            ds.writeUTF(cityName);
            String result =di.readUTF();
            System.out.println("接受服务端.."+result);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            di.close() ;
            ds.close();
            client.close();
        }
        
    }

}

 其实服务端开发要有可持续能力,保证线程一直在运行,那么上面的代码就可以改成这样:

public class WeatherServerV2 {
    public static void main(String[] args) throws IOException {
        // 创建socket 服务,应用服务端口建议在1万以上
        ServerSocket server = null;
        Socket socket = null;
        DataInputStream di=null ;
        DataOutputStream ds=null ;
        while(true){
            try {
                server = new ServerSocket(12345);
                // 按受客户端链接
                socket = server.accept();
                //为了好处理字符串
                // 接受客户端请求
                di=new DataInputStream(socket.getInputStream());
                // 向服务端发送请求
                ds=new DataOutputStream(socket.getOutputStream());
                //客户端向服务端发送的天气所在城市
                String cityName =di.readUTF();
                System.out.println("from client...."+cityName);
                //服务端向客户端返回天气情况
                String result ="晴";
                ds.writeUTF("晴");
                System.out.println("to client...."+result);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                di.close();
                ds.close();
                //服务端一般是不关闭资源的,由客户端关闭
                //socket.close();
            }
        }
    
        
        
    }

}

同样的道理,服务端不仅要有持续运行能力,还要有处理并发的能力,我们可以把客户端也改成死循环

public class WeatherClientVersion2 {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket client = null;
        DataInputStream di = null;
        DataOutputStream ds = null;
        client = new Socket("127.0.0.1", 12345);
        while(true){
            try {
                
                // 接受客户端请求
                di = new DataInputStream(client.getInputStream());
                // 向服务端发送请求
                ds = new DataOutputStream(client.getOutputStream());
                String cityName ="北京";
                ds.writeUTF(cityName);
                String result =di.readUTF();
                System.out.println("接受服务端.."+result);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                di.close() ;
                ds.close();
                client.close();
            }
            
        }
        }
    

}

 

socket 开发一

标签:

原文地址:http://www.cnblogs.com/chizizhixin/p/5836910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!