简单的java socket客户端和服务端示例

 更新时间:2014年01月29日 09:19:17   作者:  
这篇文章主要介绍了java的socket客户端和服务端示例,大家参考使用吧

客户端

复制代码 代码如下:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class MyClient { 
    public static void main(String[] args) throws Exception { 
        Socket socket = new Socket("localhost", 10000); 
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
        PrintWriter out = new PrintWriter(socket.getOutputStream()); 
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 

        while (true) { 
            String msg = reader.readLine(); 
            out.println(msg); 
            out.flush(); 
            if (msg.equals("bye")) { 
                break; 
            } 
            System.out.println(in.readLine()); 
        } 
        socket.close(); 
    } 

服务端

复制代码 代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer { 
    public static void main(String[] args) throws IOException { 
        ServerSocket server = new ServerSocket(10000); 

        while (true) { 
            Socket socket = server.accept(); 
            invoke(socket); 
        } 
    } 

    private static void invoke(final Socket client) throws IOException { 
        new Thread(new Runnable() { 
            public void run() { 
                BufferedReader in = null; 
                PrintWriter out = null; 
                try { 
                    in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
                    out = new PrintWriter(client.getOutputStream()); 

                    while (true) { 
                        String msg = in.readLine(); 
                        System.out.println(msg); 
                        out.println("Server received " + msg); 
                        out.flush(); 
                        if (msg.equals("bye")) { 
                            break; 
                        } 
                    } 
                } catch(IOException ex) { 
                    ex.printStackTrace(); 
                } finally { 
                    try { 
                        in.close(); 
                    } catch (Exception e) {} 
                    try { 
                        out.close(); 
                    } catch (Exception e) {} 
                    try { 
                        client.close(); 
                    } catch (Exception e) {} 
                } 
            } 
        }).start(); 
    } 

相关文章

  • 详解MyBatis自定义Plugin插件

    详解MyBatis自定义Plugin插件

    这篇文章主要介绍了MyBatis自定义Plugin插件的相关知识,实现方法也很简单,只需实现 Interceptor 接口,并指定想要拦截的方法签名即可,需要的朋友可以参考下
    2018-06-06
  • Idea2023配置tomcat服务器的图文教程

    Idea2023配置tomcat服务器的图文教程

    这篇文章主要介绍了Idea2023配置tomcat服务器的图文教程,本文是javaweb新手版教程,IDEA2023+JDK1.8+apache-tomcat-8.5.91,没有使用Maven,需要的朋友可以参考下
    2023-10-10
  • 浅谈Spring中的循环依赖问题与解决方案

    浅谈Spring中的循环依赖问题与解决方案

    这篇文章主要介绍了浅谈Spring中的循环依赖问题与解决方案,循环依赖就是两个或则两个以上的bean互相持有对方,最终形成闭环,比如A依赖于B,B依赖于C,C又依赖于A,需要的朋友可以参考下
    2023-12-12
  • 从汇编码分析java对象的创建过程(推荐)

    从汇编码分析java对象的创建过程(推荐)

    这篇文章主要介绍了从汇编码分析java对象的创建过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Java Method类及invoke方法原理解析

    Java Method类及invoke方法原理解析

    这篇文章主要介绍了Java Method类及invoke方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Spring Boot项目完美大一统(结果异常日志统一)

    Spring Boot项目完美大一统(结果异常日志统一)

    这篇文章主要为大家介绍了Spring Boot项目完美大一统(结果异常日志统一)的实详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • springbean的八种加载方式汇总

    springbean的八种加载方式汇总

    这篇文章主要介绍了springbean的八种加载方式,一种是XML方式声明bean,使用@Component及其衍生注解@Controller 、@Service、@Repository定义bean,还有其他方法,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 一篇文章告诉你JAVA Mybatis框架的核心原理到底有多重要

    一篇文章告诉你JAVA Mybatis框架的核心原理到底有多重要

    yBatis的底层操作封装了JDBC的API,MyBatis的工作原理以及核心流程与JDBC的使用步骤一脉相承,MyBatis的核心对象(SqlSession,Executor)与JDBC的核心对象(Connection,Statement)相互对应
    2021-06-06
  • Java中该如何优雅的使用线程池详解

    Java中该如何优雅的使用线程池详解

    在java开发中我们对“池”的概念并不陌生,常见的有数据库连接池、线程池、对象池、常量池等等,其作用基本上就是避免频繁的创建和回收,造成资源浪费,线程池也不例外,这篇文章主要给大家介绍了关于Java中该如何优雅的使用线程池的相关资料,需要的朋友可以参考下
    2021-12-12
  • RecyclerChart动态属性图标联动数据动态加载详解

    RecyclerChart动态属性图标联动数据动态加载详解

    这篇文章主要为大家介绍了RecyclerChart动态属性图标联动数据动态加载详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论