zoukankan      html  css  js  c++  java
  • Java Socket入门

    Java Socket底层采用TCP/IP协议通信,通信细节被封装,我们仅仅需要指定IP、端口,便能轻易地创建TCP或UDP连接,进行网络通信。数据的读写,可以使用我们熟悉的stream进行操作。

    TCP通信中,服务端与客户端是一对多的关系,如下图

    Client发起连接请求后,Server端响应并创建一个Socket实例,与Client端一对一通信。通信完毕后,Client端与Server端的Socket实例各自关闭连接并销毁,此次通信结束。

    发起连接的三次握手和关闭连接的四次挥手过程暂且不表,后续文章详细介绍。下面看具体代码

    服务端代码

    package com.coshaho.learn.socket;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * SocketServer.java Create on 2017年12月16日 下午11:42:03    
     * 类功能说明:   socket服务端
     * @Author coshaho
     */
    public class SocketServer 
    {
        public static void main(String[] args) throws Exception 
        {
            // 创建服务端
            ServerSocket server = new ServerSocket(10000);
            
            // 服务端阻塞式监听客户端连接请求
            // 接收到连接请求,则创建一个socket实例,与客户端通信
            Socket client = server.accept();
            
            // 获取InputStream读取数据
            InputStream in = client.getInputStream();
            byte[] b = new byte[1024];
            // 客户端关闭输出流后服务端会读取到-1标志
            while(-1 != in.read(b))
            {
                System.out.println(new String(b));
            }
           
            // 获取OutputStream输出数据
            OutputStream out = client.getOutputStream();
            out.write("hello, client".getBytes());
            // 输出结束,关闭输出流
            client.shutdownOutput();
           
            System.out.println("Server close. " + System.currentTimeMillis());
            server.close();
        }
    }

     客户端代码

    package com.coshaho.learn.socket;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    /**
     * SocketClient.java Create on 2017年12月16日 下午11:42:53    
     * 类功能说明:   socket客户端
     * @Author coshaho
     */
    public class SocketClient 
    {
        public static void main(String[] args) throws Exception 
        {
            // 请求连接服务端,握手成功,返回Socket实例
            Socket client = new Socket("127.0.0.1",10000);
            
            // 获取输入输出流,读写数据(与服务端数据读写操作相同)
            InputStream in = client.getInputStream();
            OutputStream out = client.getOutputStream();
            
            out.write("hello, server".getBytes());
            client.shutdownOutput();
            
            byte[] b = new byte[1024];
            while(-1 != in.read(b))
            {
                System.out.println(new String(b));
            }
            
            System.out.println("Client close. " + System.currentTimeMillis());
            client.close();
        }
    }
  • 相关阅读:
    python学习笔记 async and await
    python学习笔记 异步asyncio
    python学习笔记 协程
    python学记笔记 2 异步IO
    python学习笔记 可变参数关键字参数**kw相关学习
    逆波兰表达式 栈表达式计算
    Codeforces 270E Flawed Flow 网络流问题
    Codeforces 219D Choosing Capital for Treeland 2次DP
    kuangbin 带你飞 概率期望
    函数式编程思想:以函数的方式思考,第3部分
  • 原文地址:https://www.cnblogs.com/coshaho/p/8048204.html
Copyright © 2011-2022 走看看