菜鸟修炼,多客户端Thread

来源:互联网 发布:瓶中船的制作材料淘宝 编辑:程序博客网 时间:2024/04/30 10:42

路过不要错过哦,跪求犇人意见到来!

ChatServer类,模拟多客户端的服务端,代码:

package com.bzu.test;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class ChatServer {public static void main(String[] args)throws IOException {ServerSocket serverSocket=new ServerSocket(9999);int number=1;//保存客户端个数while(true){Socket socket=serverSocket.accept();System.out.println("客户端"+number+"链接成功!");//服务端开启一个独立的线程,来对客户端读写操作new Thread(new ServerStream(socket, number)).start();number++;}}}

ServerStream类,模拟服务端线程控制,代码:


package com.bzu.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import javax.xml.ws.handler.MessageContext.Scope;public class ServerStream implements Runnable {private Socket socket=null;private int number;public ServerStream(Socket socket, int number) {super();this.socket = socket;this.number = number;}@Overridepublic void run() {try {BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);while(true){String line=br.readLine();System.out.println("客户端"+number+":"+line);pw.println(line.toUpperCase());if(line.equals("bye")){System.out.println("客户端"+number+"已经断开链接");break;}}br.close();pw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

ChatClient类,模拟客户端控制,代码:


package com.bzu.test;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class ChatClient {public static void main(String[] args) throws IOException {Socket socket=new Socket("127.0.0.1", 9999);new Thread(new ClientInputStream(socket)).start();new Thread(new ClientOutputStream(socket)).start();}}

ClientInputStream类,线程类:

package com.bzu.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.SocketException;public class ClientInputStream implements Runnable {    private Socket socket=null;public ClientInputStream(Socket socket) {super();this.socket = socket;}@Overridepublic void run() {try {BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));while(true){try {String line=br.readLine();System.out.println(line);} catch (SocketException e) {break;}}br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

ClientOutputStream类,模拟输出,代码:

</pre><pre name="code" class="java">package com.bzu.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class ClientOutputStream implements Runnable {private Socket socket=null;public ClientOutputStream(Socket socket) {super();this.socket = socket;}@Overridepublic void run() {try {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);while(true){String line=br.readLine();pw.println(line);if(line.equals("bye")){break;}}br.close();pw.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}




1 0
原创粉丝点击