【简述】
要重视Socket开发,企业后台服务特长使用Socket。
1.服务端要有可持续运行能力,保证线程一致在运行
2.并发处理能力,使用多线程
【工程截图】
【WeatherRunner.java】
package com.Higgin.socket.Runnable; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; /** * 执行天气的查询 * @author YH * */ public class WeatherRunnable implements Runnable{ private Socket socket; //通过构造方法注入Socket public WeatherRunnable(Socket socket){ this.socket=socket; } @Override public void run() { DataInputStream dataInputStream=null; DataOutputStream dataOutputStream=null; try { //接受客户端的而请求数据 dataInputStream=new DataInputStream(socket.getInputStream()); //客户端发送城市的名称 String cityName=dataInputStream.readUTF(); System.out.println("from client...."+cityName); //向客户端发送数据 dataOutputStream =new DataOutputStream(socket.getOutputStream()); //查询天气信息 String result="晴天"; //向客户端回应 dataOutputStream.writeUTF(result); System.out.println("to client..."+result); } catch (Exception e) { e.printStackTrace(); }finally{ //释放资源 try { dataInputStream.close(); dataOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }
【WeatherServer.java】
package com.Higgin.socket; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import com.Higgin.socket.Runnable.WeatherRunnable; public class WeatherServer { public static void main(String[] args) throws IOException { //创建天气服务 //应用服务端口建议在10000以上 ServerSocket serverSocket=new ServerSocket(12345); System.out.println("启动天气查询服务...."); Socket socket=null; while(true){ try { //接受客户端链接 socket =serverSocket.accept(); //开启一个新的线程,使用多线程的方式 new Thread(new WeatherRunnable(socket)).start(); } catch (Exception e) { e.printStackTrace(); } } } }
【WeatherClient.java】
package com.Higgin.socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; public class WeatherClient { public static void main(String[] args) throws IOException { //创建socket连接 Socket socket=null; DataInputStream dataInputStream=null; DataOutputStream dataOutputStream=null; //模拟多次请求,实际上可以多编译运行几次,利用cmd for(int i=0;i<100;i++){ try{ socket =new Socket("127.0.0.1",12345); //向服务端发送数据 dataOutputStream =new DataOutputStream(socket.getOutputStream()); //城市名称 String cityName="北京"; dataOutputStream.writeUTF(cityName); System.out.println("to Server.."+cityName); //接受服务端的返回数据 dataInputStream=new DataInputStream(socket.getInputStream()); String result=dataInputStream.readUTF(); System.out.println("from server ..."+result); }catch(Exception e){ e.printStackTrace(); }finally{ //释放资源 dataInputStream.close(); dataOutputStream.close(); socket.close(); } } } }
时间: 2024-10-09 09:01:36