zoukankan      html  css  js  c++  java
  • java网络编程学习笔记(二):socket详解

    1.Socket有多种构造方法,大多数构造方法在构造的时候就指定了连接的主机和端口号。当客户端的构造方法与服务器连接的时候,可能需要等待一段时间,因为需要建立连接。默认情况下,Socket的构造方法会一直等待下去,直到连接成功或者是出现异常。Socket的构造方法请求连接的时候,受到底层网络传输速度的影响,可能长时间处于等待状态。如果希望限定等待时间,就需要一个无参的构造方法,可以如下做:

    Socket socket=new Socket();

    SocketAdress remoteAddr=new InetSocketAddress("localhost",800);

    socket.connect(remoteAddr,60000);//等待建立连接的超时时间是1分钟,以毫秒为单位。

    上面的代码代表的是socket等待连接的时间是1分钟,如果超过1分钟,就会抛出SocketTimeOutException.

    2.设定服务器地址

    //返回本地主机的地址

      InetAddress addr1=InetAddress.getLocalHost();

    //返回代表“222.34.5.7”

    InetAddress addr2=InetAddress.getByName(“222.34.5.7”);

    //返回域名为“www.baidu.com”的IP地址

    InetAddress addr2=InetAddress.getByName(“www.baidu.com”);

    3.设定客户端的地址

    在一个Socket对象中,既包含远程服务器的对象和端口信息,也包含本地客户端的地址和端口信息。默认情况下,客户端的IP地址来源于客户程序所在的主机,客户端的端口则由操作系统随机分配。

    4.客户端连接服务器时出现的四大异常

       UnknowHostException:如果无法识别主机的名字或IP地址,就会抛出这种异常。

       ConnectionException:如果没有服务器进程监听指定的端口,或者服务器进程拒绝连接,就会抛出这种异常。

       SocketTimeoutException:如果连接超时,就会抛出这种异常。

       除了以上4种异常外,还有一个绑定异常,

       将

          socket=new Socket();

          socket.connect(remoteAddr,1000);

    修改为:

          socket=new Socket();

          socket.bind(new InetSocketAddress(InetAddress.getByName("222.34.5.7"),5678)); 

          socket.connect();

    修改后的代码试图将Socket的本地IP地址设为:222.34.5.7,将端口设置为5678.如果本机不具有IP地址222.34.5.7,或者5678端口已经被占用,那么修改后代码的bind方法就会抛出BindException。

    当调用socket的close方法会释放掉socket所占用的资源。

  • 相关阅读:
    C#_WinForm接收命令行参数
    SQLite不支持的SQL语法总结
    Thirft框架介绍
    jquery获取复选框的值
    REST构架风格介绍:状态表述转移
    RESTful HTTP的实践infoQ
    C#如何在webBrowser1控件通过TagName,Name查找元素(没有ID时)遍历窗体元素
    Html TO Ubb and Ubb TO Html
    SQL 位运算
    Memcached真的过时了吗?【转帖】
  • 原文地址:https://www.cnblogs.com/hujingwei/p/4948479.html
Copyright © 2011-2022 走看看