49 Java socket 2

来源:互联网 发布:淘宝欠下贷款怎么协商 编辑:程序博客网 时间:2024/06/08 09:04
import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;public class MyServer {public static ArrayList<Socket> socketList=new ArrayList<>();public static void main(String[] args) throws IOException {ServerSocket ss=new ServerSocket(3000);while(true){//慈航代码会阻塞,将一直er等待别人的连接Socket s=ss.accept();socketList.add(s);//每当客户端连接后启动一个ServerThread线程为该客户端服务new Thread(new ServerThread(s)).start();;}}}

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket;public class ServerThread  implements Runnable{//定义当前线程所处理的SocketSocket s=null;//该线程所处理的Scoket对应的输入流BufferedReader br=null;//构造方法public ServerThread(Socket s) throws IOException{this.s=s;//初始化该Socket 对应的输入流br=new BufferedReader(new InputStreamReader(s.getInputStream()));}@Overridepublic void run() {// TODO Auto-generated method stubtry {String content=null;//采用循环不断的从Socket中读取客户端发送过来的数据while ((content=readfromClient())!=null){//遍历socketList 中的每一Socket//就爱那个独到的内容想每个Socket发送一次for(Socket s:MyServer.socketList){PrintStream ps=new PrintStream(s.getOutputStream());ps.println(content);}}} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}}/** * 定义读取客户端数据的方法 * @return */public String readfromClient() {// TODO Auto-generated method stubtry {return br.readLine();//如果捕获异常,则表明该Socket 对应的客户端已经关闭} catch (Exception e) {// TODO: handle exceptionMyServer.socketList.remove(s);}return null;}}

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket;public class MyClient {public static void main(String[] args) throws IOException {Socket s=new Socket("127.0.01", 3000);//客户端启动ClientThread 线程不断的读取来自服务器的数据new Thread(new ClientThread(s)).start();PrintStream ps=new PrintStream(s.getOutputStream());String line=null;BufferedReader br=new BufferedReader(new InputStreamReader(System.in));while((line=br.readLine()) != null){//将用户的键盘输入内容写入Socket对应的输出流ps.println(line);}}}


 

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;public class ClientThread implements Runnable {//该项称负责处理的Socket private Socket s;//该线程所处理的Socket对应的输入流BufferedReader br=null;public ClientThread(Socket s) throws IOException{this.s=s;br=new BufferedReader(new InputStreamReader(s.getInputStream()));}@Overridepublic void run() {// TODO Auto-generated method stubtry {String content=null;//不断的读取Socket 输入流中的内容,并将这些内容打印输出while((content=br.readLine())!=null){System.out.println(content);}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}


 

0 0
原创粉丝点击