博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP协议的简单应用一
阅读量:5249 次
发布时间:2019-06-14

本文共 2643 字,大约阅读时间需要 8 分钟。

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();        }    }}

转载于:https://www.cnblogs.com/zxfei/p/10920611.html

你可能感兴趣的文章
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
java 常用命令
查看>>
CodeForces Round #545 Div.2
查看>>
卷积中的参数
查看>>
51nod1076 (边双连通)
查看>>
Item 9: Avoid Conversion Operators in Your APIs(Effective C#)
查看>>
深入浅出JavaScript(2)—ECMAScript
查看>>
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>