在客户端与服务端的简单链接上进行了略微的添加,实现了多个客户端与服务端的链接java
import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class Server { // 存放服务端接收到的客户端类(能够进行操做)的队列 public ArrayList<ClientServer> clientServer; public Server() { // TODO Auto-generated constructor stub // 初始化队列 clientServer = new ArrayList<ClientServer>(); } public void initServer() { try { // 建立监听的端口号 ServerSocket s = new ServerSocket(8888); System.out.println("启动服务器....."); System.out.println("等待客户机进入......."); // 让server进入阻塞状态(等待客户机的进入),有客户机链接上此端口的server客户端就会返回一个socket对象,服务器进行接受 // 不断的去接受客户端发来的请求,并将接受到的socket放到队列中 while (true) { Socket ss = s.accept(); clientServer.add(new ClientServer(ss)); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { Server server = new Server(); server.initServer(); } /** * 操做类,接受了socket,进行服务端对客户端的操做 * * @author M_WBCG * */ class ClientServer { Socket ss; public ClientServer(Socket ss) { // TODO Auto-generated constructor stub this.ss = ss; // socket的输出流(该流为字节流) OutputStream out; try { out = ss.getOutputStream(); String msg = "服务器说你好\n"; out.write(msg.getBytes()); // 将流和socket关掉,不关掉客户端在未接受到消息的时候会断开链接 out.close(); ss.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { Socket s; try { // 客户机链接服务端的IP地址和端口号 s = new Socket("127.0.0.1", 8888); System.out.println("链接到服务器....."); // 得到输入流(字节流),再把字节输入流放到缓冲输入流中 InputStream in = s.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String msg = ""; msg = br.readLine(); System.out.println(msg); //关闭掉流 br.close(); in.close(); s.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }