zoukankan      html  css  js  c++  java
  • 使用java实现一个hello/hi的简单的网络聊天程序

    学号:SA19225345

    参考资料来源https://github.com/mengning/net

    1 什么是Socket

      网络由下往上分为 物理层 、数据链路层 、 网络层 、 传输层 、 会话层 、 表现层 和 应用层。IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP协议是应用层协议,主要解决如何包装数据。
      socket,又称套接字,是在不同的进程间进行网络通讯的一种协议、约定或者说是规范。对于socket编程,它更多的时候像是基于TCP/UDP等协议做的一层封装或者说抽象,是一套系统所提供的用于进行网络通信相关编程的接口。

     2 工作原理

      通常服务器端需要先初始化socket,然后设定一个端口号,服务端不会主动向客户端发送请求,而是进入监听状态,等待客户端的连接请求,java中通过accept方法时阻塞处于监听状态的服务端进程。客户端要想向服务端发送连接请求,需要指定服务端的地址和端口号,初始化socket,然后申请连接,服务器接受申请并且回复申请许可(这里要涉及TCP三次握手连接),然后发送数据,最后关闭连接,这是一次交互过程。注意,socket连接成功后服务端和客户端可多次传输数据,并且服务端可以主动向客户端发送数据。

    3 Socket用法

      1)Socket 类

        Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。 构造方法public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指 定的host是null ,则相当于指定地址为回送地址。
        成员方法 :

             public InputStream getInputStream() : 返回此套接字的输入流。如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。 关闭生成的InputStream也将关闭相关的Socket。

        public OutputStream getOutputStream() : 返回此套接字的输出流。 如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。 关闭生成的OutputStream也将关闭相关的Socket。
        public void close() :关闭此套接字。 一旦一个socket被关闭,它不可再使用。 关闭此socket也将关闭相关的InputStream和OutputStream 。
        public void shutdownOutput() : 禁用此套接字的输出流。 任何先前写出的数据将被发送,随后终止输出流。
      2)ServerSocket类
      ServerSocket 类:这个类实现了服务器套接字,该对象等待通过网络的请求。

      构造方法

         public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号。

        构造举例,代码如下: ServerSocket server = new ServerSocket(6666);

      成员方法

        public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法
    会一直阻塞直到建立连接。

    4 程序实现

      服务端:

       客户端:

       运行结果:

      

     

  • 相关阅读:
    git版本库管理介绍,撤销git pull操作
    【laravel5.4】自定义404、503等页面
    【laravel5.4】{{$name}}、{{name}}、@{{$name}} 和 @{{name}} 的区别
    python 了解一点属性的延迟计算
    python 了解一下__dict__
    excel怎么把一个sheet的 全部内容打印到一页纸上
    python 简单了解一下 描述器
    python 调用父类方法, 重写父类构造方法, 不显式调用,会报错
    Python 今天抽空学习了@Property
    python 语法糖是什么意思
  • 原文地址:https://www.cnblogs.com/sovegetabable/p/11992251.html
Copyright © 2011-2022 走看看