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();
        }
    }
  • 相关阅读:
    7.5_链表_链表中添加结点
    【链表】创建新结点
    【单链表】头插法 & 尾插法
    7.5_链表_添加元素_尾插法/头插法
    7.5_链表_创建链表
    7.4_结构体_返回结构体的函数
    通俗的理解一下生成式对抗网络(GAN)
    Linux中如何让进程(或正在运行的程序)到后台运行?
    anaconda搭建本地源(加速访问),内网源(无外网访问)
    Ubuntu18.04(16和14也可以) 安装独立显卡后开机黑屏
  • 原文地址:https://www.cnblogs.com/coshaho/p/8048204.html
Copyright © 2011-2022 走看看