java socket多线程并发消息读取".properties"文件ip和端口配置

来源:互联网 发布:大型java web项目源码 编辑:程序博客网 时间:2024/06/16 11:49

本题考察了socket通信、多线程并发、读取文件,io流、面向对象封装,继承、类型转换等知识点。

client代码:

public void start(){Socket socket;String ss="";//调用同一包内ReadProperties类的ReadProperties()方法ReadProperties rp=new ReadProperties();rp.ReadProperties();String IP=rp.getIP();//从a.properties中获得ip//从a.properties中获得port,将String类型强转成int类型int port=Integer.parseInt(rp.getPort());try {socket=new Socket(IP,port);//System.out.println("IP="+IP);KeFuduanjie kf=new KeFuduanjie(socket);//客户端接收消息//客户端发送消息【kfs线程发送消息】KeFuWuFasong kfs = new KeFuWuFasong(socket);kfs.setName("kfs");ClientReadFile crf=new ClientReadFile(socket);//从硬盘读取文件kf.start();kfs.start();crf.start();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class KeFuduanjie extends Thread{Socket socket;String ss;BufferedReader br;public KeFuduanjie(Socket socket){this.socket=socket;try {br=new BufferedReader(new InputStreamReader(socket.getInputStream()));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//负责接收服务端来的消息public void run(){while(true){try {ss=br.readLine();System.out.println(socket.getLocalPort()+"服务器---->客服端: "+ss);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class KeFuWuFasong extends Thread{Socket socket;BufferedWriter bw;BufferedReader br;//OutputStream os;//String word;public KeFuWuFasong(Socket socket){this.socket=socket;try {// os=socket.getOutputStream();//2将socket转换成IO流 br=new BufferedReader(new InputStreamReader(System.in));//不从控制台输入怎样写死?bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//word="hi";//Thread.sleep(2000);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }public void run(){while(true){try {//os.write(word.getBytes());bw.write(br.readLine());bw.newLine();bw.flush();//或用bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class ClientReadFile extends Thread{Socket socket;DataInputStream dis;DataOutputStream dos;public ClientReadFile(Socket socket){this.socket=socket;try {dis=new DataInputStream(new FileInputStream("F:/commons-logging.properties"));dos=new DataOutputStream(socket.getOutputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void run(){//while(true){try {Thread.sleep(10000);System.out.println("wait 10s");int i=0;   byte[] b=new byte[1024];   String s;   while((i=dis.read(b))>0){    s=new String(b,"gbk");    dos.write(b,0,i);    System.out.println("读取的文件信息:"+s);   }dos.flush();//或用bw.close();dis.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//}}

server端代码:

public class Server {public static void main(String[] args) {Server server=new Server();server.start();}public void start(){ReadProperties rp=new ReadProperties();rp.ReadProperties();int port=Integer.parseInt(rp.getPort());//2014-4-9将String类型强转成int类型try {ServerSocket ss=new ServerSocket(port);Socket socket = null;ServerToClientThread stct = null;while(true){socket = ss.accept();   //迎接(接收)客户端的Socket访问stct = new ServerToClientThread(socket);  //分配一个新线程负责和信赖的Socket沟通stct.start();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class ServerToClientThread extends Thread{Socket socket;BufferedReader br;BufferedWriter bw;String s;//建立的同时,和客户端的Socket建立输入、输出流public ServerToClientThread(Socket socket){this.socket = socket;try {bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));} catch (IOException e) {e.printStackTrace();}}public void run(){ServerReceiveFromClient srfc = new ServerReceiveFromClient(socket);srfc.start();while(true){try {bw.write("欢迎光临。");bw.newLine();bw.flush();Thread.sleep(10*1000);} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}}}class ServerReceiveFromClient extends Thread{Socket socket;BufferedReader br;String s;public ServerReceiveFromClient(Socket socket){this.socket = socket;try {br = new BufferedReader(new InputStreamReader(socket.getInputStream()));} catch (IOException e) {e.printStackTrace();}}public void run(){while(true){try {s = br.readLine();System.out.println("客户端:"+socket.getInetAddress().getHostAddress()+"发送了:"+s);} catch (Exception e) {e.printStackTrace();}}}}


properties文件内容:

ip=127.0.0.1   
port=8080

0 0
原创粉丝点击