Java Socket编程笔记_动力节点Java学院整理

  

对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求。这会,套接字对于我们来说就非常实用了。下面是本次学习的笔记。主要分异常类型,交互原理,插座,考察一下,多线程这几个方面阐述。
  

  

  

在了解套的内容之前,先要了解一下涉及到的一些异常类型。以下四种类型都是继承于IOException,所以很多之后直接弹出IOException即可。

  

UnkownHostException:,,,主机名字或IP错误
  ConnectException:,,,服务器拒绝连接,服务器没有启动,(超出队列数,拒绝连接)
  SocketTimeoutException:,,,,,连接超时
  BindException:,,,套接字对象无法与制定的本地IP地址或端口绑定,
  

  

  

插座与ServerSocket的交互、下面的图片我觉得已经说的很详细很清楚了只
  

  

癑ava

  

  

插座()
  套接字(int InetAddress地址,端口)抛出UnknownHostException, IOException
  套接字(InetAddress地址,int港口,InetAddress localAddress, int localPort)抛出IOException
  套接字(字符串主机,int端口)抛出UnknownHostException, IOException
  套接字(String主机,int港口,InetAddress localAddress, int localPort)抛出IOException
  

  

除去第一种不带参数的之外,其它构造函数会尝试建立与服务器的连接。如果失败会抛出IOException错误。如果成功,则返回插座对象。

  

InetAddress是一个用于记录主机的类,其静态getHostByName(字符串味精)可以返回一个实例,其静态方法getLocalHost()也可以获得当前主机的IP地址,并返回一个实例.Socket(字符串主机,int港口,InetAddress localAddress, int localPort)构造函数的参数分别为目标IP,目标端口,绑定本地IP,绑定本地端口只
  

  

  

getInetAddress (),,,,远程服务端的IP地址
  getPort (),,,,远程服务端的端口
  getLocalAddress (),,,本地客户端的IP地址
  getLocalPort (),,,本地客户端的端口
  getInputStream (),,,,获得输入流
  getOutStream (),,,,获得输出流

  

值得注意的是,在这些方法里面,最重要的就是getInputStream()和getOutputStream()了只
  

  

  

关闭(),,,,,,,,//连接是否已关闭,若关闭,返回真的,否则返回假
  isConnect ();//如果曾经连接过,返回真的,否则返回假
  isBound (),,,,,,,,//如果插座已经与本地一个端口绑定,返回真的,否则返回假

  

如果要确认插座的状态是否处于连接中、下面语句是很好的判断方式。

  

布尔isConnection=socket.isConnected (),,! socket.isClosed ();,,//判断当前是否处于连接
  

  

  

很多时候,我们并不知道在获得的输入流里面到底读多长才结束。下面是一些比较普遍的方法:
  

  
      <李> & # 61548;,自定义标识符(譬如下面的例子,当受到“再见”字符串的时候,关闭插座)   <李> & # 61548;,告知读取长度(有些自定义协议的,固定前几个字节表示读取的长度的)   <李> & # 61548;,读完所有数据李   <李> & # 61548;,当插座调用近的时候关闭的时候,关闭其输入输出流,
      李   
  

        考察一下()抛出IOException   考察(int端口)抛出IOException   考察(int, int积压)抛出IOException   考察(int, int积压,InetAddress bindAddr)抛出IOException   
     

<强>

  

1。港服务端要监听的端口,积压客户端连接请求的队列长度;bindAddr服务端绑定IP

  

2。如果端口被占用或者没有权限使用某些端口会抛出BindException错误。譬如1 ~ 1023的端口需要管理员才拥有权限绑定。

  

3。如果设置端口为0,则系统会自动为其分配一个端口;

  

4。bindAddr用于绑定服务器IP,为什么会有这样的设置呢,譬如有些机器有多个网卡。

  

5。考察一旦绑定了监听端口,就无法更改.ServerSocket()可以实现在绑定端口前设置其他的参数只
  

  


  

        公共空间服务(){   而(真){   Socket套接字=零;   尝试{   套接字=serverSocket.accept();//从连接队列中取出一个连接,如果没有则等待   System.out.println(“新增连接:“+ socket.getInetAddress () +“:”+ socket.getPort ());   …//接收和发送数据   }捕捉(IOException e) {e.printStackTrace();}{终于   尝试{   如果(套接字!=null) socket.close();//与一个客户端通信结束后,要关闭插座   }捕捉(IOException e) {e.printStackTrace ();}   }   }   }

Java Socket编程笔记_动力节点Java学院整理