Java中使用ServerSocket和Socket的多线程示例

开始...
1、服务器端:

public class ServerSocketApp {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(9999);
            System.out.println("服务已启动");
            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("客户" + socket.getInetAddress().getHostAddress() + "来访,");
                new Thread(() -> {
                    try {
                        InputStream inputStream = socket.getInputStream();
                        PrintStream printStream = new PrintStream(socket.getOutputStream());
                        Scanner in = new Scanner(inputStream);
                        in.useDelimiter("\n");
                        while (in.hasNext()) {
                            String message = in.next().trim();
                            if (message.equalsIgnoreCase("bye")) {
                                String bye = new String("客户端已退出,拜拜".getBytes("UTF-8"));
                                System.out.println(bye);
                                printStream.println(bye);
                            } else {
                                printStream.println("ECHO>" + message);
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2、客户端程序:

public class ClientSocketApp {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 9999);
        Scanner in = new Scanner(System.in);
        Scanner inputStream = new Scanner(socket.getInputStream());
        PrintStream printStream = new PrintStream(socket.getOutputStream());
        in.useDelimiter("\n");
        inputStream.useDelimiter("\n");
        boolean b = true;
        System.out.println("请输入:");
        while (b) {
            if (in.hasNext()) {
                String message = in.next().trim();
                printStream.println(message);
                if (inputStream.hasNext()) {
                    String serverMessage = new String(inputStream.next().trim().getBytes("UTF-8"));
                    System.out.println(serverMessage);
                }
                if (message.equalsIgnoreCase("bye")) {
                    b = false;
                }
            }
        }
        socket.close();
    }
}

3、运行
服务器
cd com/kyy/bases/socket 运行javac ServerSocketApp.java
cd classpath根目录 运行java ServerSocketApp
服务器端启动
客户端
cd com/kyy/bases/socket 运行javac ClientSocketApp.java
cd classpath根目录 运行java ClientSocketApp

遇到的问题:
如果不通过eclipse、Idea等工具,会出现 “找不到或无法加载主类 com.kyy.bases.socket.ClientSocketApp”的异常
解决办法,设置classpath=.;"JAVA_HOME"/lib
或者在cmd窗口临时设置set classpath=.;

...结束

原文地址:https://blog.51cto.com/11147669/2409029

时间: 2024-11-06 11:29:47

Java中使用ServerSocket和Socket的多线程示例的相关文章

java 中Int和Integer区别以及相关示例

Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入不是对象的基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer, 从JDK 1.5(5.0)开始引入了自动装箱/拆箱机制,使得二者可以相互转换. Java 为每个原始类型提供了包装类型: 原始类型: boolean, char,        byte,short,int,       long,float,d

java中SoftReference与WeakReference应用于高速缓存示例

前言: 本文首先介绍强引用StrongReference.软引用SoftReference.弱引用WeakReference与虚引用PhantomReference之间的区别与联系: 并通过一个高速缓存的构建方案,来了解SoftReference的应用场景. 本文参考书籍Thinking in Java以及多篇博文. 一.Reference分类 Reference即对象的引用,根据引用的不同类型,对JVM的垃圾回收有不同的影响. 1. 强引用StrongReference 通常构建对象的引用都是

java中的List详解以及代码示例

一:概念List是Java集合Collection中的一个接口,一般用ArrayList类和LinkedList类去实现这个接口.Collection集合还有其他接口:Map,Set(在我的另一篇博客)二:LIST的使用List的常用方法 boolean add(E e) //尾插 e void add(int index, E element) //将 e 插入到 index 位置 boolean addAll(Collection<? extends E> c) //尾插 c 中的元素 E

Java中RSA非对称密钥加解密使用示例

一.简介: RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名.这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法. 二.RSA的公钥.私钥的组成,以及加密.解密的公式可见于下表 三.使用方式: ①  假设A.B机器进行通信,已A机器为主: ②  A首先需要用自己的私钥为发送请求数据签名,并将公钥一同发送

Java中的七种排序方式代码示例

package baseJava; /** * @title SortMethods.java * @author DonsenChen * @Date 2018年5月2日 上午10:16:03 * @Description */ public class SortMethods { public static void main(String[] args) { int[] arr = { 3, 7, 9, 1, 4, 8, 2, 6, 5 }; binarySort(arr); bubble

Java中的数组数据结构需要了解的要点

. 首先,数组是Java中的对象.它们不是像int.short或long这样的基本类,也不是具有很多方法的全功能对象,但由于它们是对象,所以它们隐式地扩展了Object,这就是为什么可以使用数组引用(例如toString())调用java.lang.object的任何方法. Java中数组的另一个重要之处是,一旦创建,就不能更改数组的大小.好奇的开发人员可能会问,我们如何在Java中拥有像ArrayList这样的动态集合,可以在饱和的时候调整自身大小?好吧,扩容不像你想得那样,可以简单地增加一个

Java中Socket通信的知识回顾---学习笔记

两台计算机进行通信的基本前提: (1)IP地址: 每台计算机都有自己独一无二的IP地址,根据IP地址判断与哪台计算机进行通信. (2)端口号: 每个应用程序都有自己专属的端口,根据端口号判断与计算机中的哪个应用程序进行通信. 说明: <1>用于区分不同应用程序 <2>端口号的范围:0-65535,其中0-1023是为系统保留的端口号 <3>常用的协议的端口号: http:80 ftp:21 telnet:23 <4>IP地址+端口号=Socket,Socke

Java中Socket网络通信

目录 目录 网络协议信息 InetAddress类的应用 URL类的应用 基于TCP的Socket通信 基于UDP的socket通信 Socket通信总结 markdown编辑器快捷键 网络协议信息 TCP 传输控制协议(Transmission Control Protocol) IP 互联网协议(Internet Protocol) HTTP 超文本传输协议(默认端口号为80) FTP 文件传输协议(默认端口号为:21) Telnet (远程登录服务,默认端口号为:23) InetAddre

读懂Java中的Socket编程(转)

Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序. 餐前甜点 Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对这个