在客户端与服务端的简单连接上进行了略微的添加,实现了多个客户端与服务端的连接
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(); } }}说明
客户端与之前并没有什么改动,服务端在接受客户端的时候使用while(true)不断的循环接受客户端发来的请求,并将接受到的socket保存下来,可以进行细节操作,实现一对多之前有说过socket通道流如果没有接受到请求是一直处于阻塞状态,那么怎样可以实现客户端与服务端的交互可(可以同时发送消息和就收消息)?
新闻热点
疑难解答