zoukankan      html  css  js  c++  java
  • TCP协议的简单应用一

    TCP协议的应用,实现一个服务器处理多个客户端请求(向服务器发送消息,服务器接收到后以原消息返回给客户端。)

    客户端类

    import java.io.*;
    import java.net.Socket;
    import java.util.Scanner;
    
    //先写出后读入
    public class EchoMultiClient {
    	public static void main(String[] args) {
    	    Scanner input = new Scanner(System.in);
    
    	    try {
    	        //创建一个Socket对象,指定要连接的服务器
    	        Socket socket = new Socket("127.0.0.1",6666);
    
    	        //向服务器发送数据,先从socket获得输出流,并包装
    	        PrintStream ps = new PrintStream(new BufferedOutputStream(socket.getOutputStream()));
    	        System.out.println("请输入要发送的内容:");
    	        String info = input.nextLine();
    	        ps.println(info);
    	        ps.flush();
    
    	        //读取服务器返回的消息,先从socket获得输入流,并包装
    	        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    	        info = br.readLine();
    	        System.out.println(info);
    
    	        //关闭流
    	        br.close();
    	        ps.close();
    	    } catch (IOException e) {
    	        e.printStackTrace();
    	    }
    	}
    }
    

    服务器类

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
    * 处理多个客户端
    * 主线程用于监听客户端的连接,每次有链接成功,开启一个线程来该客户端的消息
    */
    public class EchoMultiServer {
    	public static void main(String[] args) {
    
    	    //创建一个固定大小的线程池
    	    ExecutorService es = Executors.newFixedThreadPool(3);
    
    	    try {
    	        //创建服务器端套接字,并指定端口号
    	        ServerSocket serverSocket = new ServerSocket(6666);
    	        System.out.println("服务器已启动,等待连接。。");
    
    	        //现在不直接处理了,主线程只负责接待,具体操作交由其他线程实现
    	        while (true) {
    	            Socket socket = serverSocket.accept();
    	            System.out.println("一个客户端连接成功。。。" + socket.getInetAddress().getHostAddress());
    
    	            es.execute(new UserThread(socket));
    	        }
    	    } catch (IOException e) {
    	        e.printStackTrace();
    	    }
    	}
    }
    
    /**
    * 用来处理客户端请求的线程任务
    */
    class UserThread implements Runnable {
    
    	//处理谁?
    	private Socket socket;
    
    	public UserThread(Socket socket) {
    	    this.socket = socket;
    	}
    
    	@Override
    	public void run() {
    	    try {
    	        //读取客户端请求
    	        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    	        String info = br.readLine();
    	        System.out.println(info);
    
    	        //向客户端返回消息
    	        PrintStream ps = new PrintStream(new BufferedOutputStream(socket.getOutputStream()));
    	        ps.println("echo:" + info);
    	        ps.flush();
    
    	        ps.close();
    	        br.close();
    	    } catch (IOException e) {
    	        e.printStackTrace();
    	    }
    	}
    }
  • 相关阅读:
    ecshop后台根据条件查询后不填充table 返回的json数据,content为空?
    smarty中判断一个变量是否存在于一个数组中或是否存在于一个字符串中?
    getJSON回调函数不执行问题?
    高德地图关键字搜索删除上一次搜索的Marker
    多表连接查询详解
    网址图标设置
    CSS 引入方式 选择器
    Html 表单标签 Form
    Html 基本标签
    Python Socket实现简单web服务器
  • 原文地址:https://www.cnblogs.com/zxfei/p/10920611.html
Copyright © 2011-2022 走看看