zoukankan      html  css  js  c++  java
  • java socket编程

      对于java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket,服务端客户端通过Socket建立连接就可以通信了。首先,ServerSocket在服务器监听某端口,当发现客户端有某Socket试图连接ServerSocket时,它会accept该请求,同时在服务端建立一个Socket与之通信,这样客户端和服务端各有一个Socket。

      Socket之间通信其实就是客户端往Socket的输出流写内容,服务端就可以从输出流里读取对应内容。而且Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。不多说,上例子:

    服务端:  

    public class Server {

    public static void main(String args[]) throws IOException {
    int port = 8090;
    //定义一个ServerSocket监听在端口8090上
    ServerSocket server = new ServerSocket(port);
    //server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的,服务端没接收到客户端发送的信息,就会一直监听,除非关闭输出流
    Socket socket = server.accept();
    //获取socket的InputStream,并从中读取客户端发过来的信息了。
    Reader reader = new InputStreamReader(socket.getInputStream());
    char chars[] = new char[64];
    int len;
    StringBuilder sb = new StringBuilder();
    while ((len=reader.read(chars)) != -1) {
    sb.append(new String(chars, 0, len));
    }
    System.out.println("from client: " + sb);
    reader.close();
    socket.close();
    server.close();
    }
    }

    客户端:

    public class Client {
    public static void main(String args[]) throws Exception {
    String host = "127.0.0.1"; // 要连接的服务端IP地址
    int port = 8090; // 要连接的服务端对应的监听端口
    // 与服务端建立连接
    Socket client = new Socket(host, port);
    // 建立连接后就可以往服务端写数据了
    Writer writer = new OutputStreamWriter(client.getOutputStream());
    writer.write("我是中国人,我爱自己的祖国");
    writer.flush();// 写完后要记得flush
    writer.close();
    client.close();
    }
    }

    服务启动后,客户端运行服务端console窗口便会打印客户端发送的消息:

    from client: 我是中国人!

    种桃道士归何处,前度刘郎今又来。
  • 相关阅读:
    ARM开发工具软件命令具体解释---嵌入式回归第三篇
    Java模拟公司置办货物系统(二)
    springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息
    Django Drops
    从 "org.apache.hadoop.security.AccessControlException:Permission denied: user=..." 看Hadoop 的用户登陆认证
    iOS中Storyboard使用要点记录
    ACdream 1084 寒假安排(阶乘素因子分解)
    【死磕Java并发】-----J.U.C之AQS:CLH同步队列
    使用freemarker做邮件发送模板
    springboot 使用freemarker自定义标签
  • 原文地址:https://www.cnblogs.com/jianwei-dai/p/4812783.html
Copyright © 2011-2022 走看看