在客户/服务器通信模式中,客户端需要主动创建与服务器连接的Socket(套接字),服务器端收到了客户端的连接请求,也会创建与客户连接的Socket。Socket可以看做是通信连接两端的收发器,服务器与客户端都通过Socket来收发数据。

构造Socket

(1)Socket的构造方法有以下几种重载形式:

Socket() Socket(InetAddress address,int port) throws UnknownException,IOException Socket(InetAddress address,int port, InetAddress localAddr,int localPort)throws IOException Socket(String host,int port, InetAddress localAddr,int localPort)throws IOException

除了第一个不带参数的构造方法外,其他构造方法都会试图建立与服务器的连接,如果连接成功,就返回Socket对象;如果因为某些原因连接失败,就会抛出IOException。

(2)设定等待建立连接超时时间:

客户端的Socket的构造方法请求与服务器连接时,默认情况下,Socket的构造方法要一直等待下去,知道连接成功或者出现异常。如需要限定等待时间,需要使用不带参数的构造方法:

Socket Socket = new Socket(); SocketAddress remoteAddr = new InetAddress(“localhost”,8000); Socket.connect(remoteAddr,60000);//等待1分钟

如果超过一分钟后,既没有连接成功,也没有出现其他异常,那么会抛出SocketTimeoutExcetion。

(3)InetAddress类

InetAddress addr1 = InetAddress.getLocalHost(); InetAddress addr2 = InetAddress.getByName(“202.198.1.123”);

(4)客户Socket连接服务器可能抛出的异常

IOException

____UnknownHostException

____InterruptedIoException

________SocketTimeoutException

____SocketException

________BindException

________ConnectException

获取Socket的信息

以下方法用于获取Socket的有关信息:

getInetAddress():

getPort():

getLocalAddress():

getLocalPort():

getInputStream():获得输入流。如果Socket还没有连接,或者已经关闭,或者已经通过shutdownInput()方法关闭输入流,那么此方法会抛出IOException。

getOutputStream():获得输出流。如果Socket还没有连接,或者已经关闭,或者已经通过shutdownOutput()方法关闭输入流,那么此方法会抛出IOException。

关闭Socket

为了保证关闭Socket的操作总是执行的,强烈建议把这个操作放在finally代码块中:

Socket socket = null; Try{ socket = new Socket(“www.sina.com”,80); //ahfghafjka hgfhaf }catch(IOException e){ e.printStackTrace(); }finally{ Try{ If(socket!=null)socket.close(); }catch(IOException e1){e1.printStackTrace();} }

Socket提供的3个状态测试方法:

isClosed():是判断客户端是否已经调用过close()方法了。这个方法并不是判断服务端是否已经断开连接了(PS:有的书上说得那叫什么啊,就不提名字了)

isConnected():如果Socket曾经连接到远程主机,则返回true,否则返回false。

isBound():如果Socket已经与一个本地端口绑定,则返回true,否则返回false。

如果要判断一个Socket对象是否处于连接状态,可采用以下方式:

Boolean is Connected = socket.isConnected()&&!socket.isClosed();

在学习的过程中,发现有的书写的总体来说不错,但是个别地方存在着致命的错误,要小心!

菜猪的JAVA 网络编程学习之Socket用法详解(上)相关推荐

  1. Java网络编程之实现资源下载详解【王道Java】

    文章目录 一,前言 二,实现资源下载 三,资源下载的客户端 四,资源下载的服务器端 五,附源码: 5.1,资源下载的客户端 5,2 ,资源下载的服务器端 六,最后 一,前言 有一个作业需求,如下: 实 ...

  2. unix网络编程——ioctl 函数的用法详解

    https://blog.csdn.net/ashlingr/article/details/8227603

  3. java 中的socket_Java中Socket用法详解

    一.构造Socket Socket的构造方法有以下几种重载形式: (1)Socket() (2)Socket(InetAddress address, int port)throws UnknownH ...

  4. java 网络编程学习笔记

    java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...

  5. Java网络编程学习——简单模拟在线聊天

    Java网络编程学习--简单模拟在线聊天 学了java网络,也是该做个小案例来巩固一下了. 本次案例将使用UDP和多线程模拟即时聊天,简单练练手. 1.前提知识 需要知道简单的IO流操作,以及简单的U ...

  6. Java多线程编程中Future模式的详解

    转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...

  7. java 函数fun_c语言中fun用法详解_后端开发

    Java Dao层的作用_后端开发 Dao层叫数据访问层,属于一种比较底层,比较基础的操作,可以具体到对于某个表或某个实体的增删改查,其Dao层的作用是对数据库的访问进行封装,从而不涉及业务,实现解耦 ...

  8. Java 网络编程学习复习总结(一)-2021.05.28

    网络编程 什么是计算机网络? 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递 ...

  9. Java网络编程二:Socket详解

    Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...

最新文章

  1. 【转】如何在忘记CentOS的root密码的情况下修改root密码。
  2. Server 对象 错误 'ASP 0177 : 800401f3' Server.CreateObject 失败解决方案
  3. eclipse在server中tomcat server找不到的问题
  4. 马老师 生产环境mysql主从复制、架构优化方案
  5. MYSQL 常用查询命令
  6. Java 设计模式之构造者模式
  7. 腾讯公司被法院强制执行25元,刚好是QQ超级会员的价格
  8. install anttweakbar on ubuntu
  9. 如何学好一门开发技术
  10. QQ广告营销推广全能王 QQ空间自动发表日志说说广告实用工具!
  11. 图解机器学习算法(14) | PCA降维算法详解(机器学习通关指南·完结)
  12. ubuntu 安装python mysqldb
  13. outlook左侧栏隐藏_Outlook 2007待办事项栏中没有全天活动
  14. MIT四足机器人MIT Cheetah的硬件框架
  15. 网络攻防技术——域名信息
  16. 百度阿里网易大疆等大小厂前端校招面筋 1
  17. 使用Lodop进行web 打印(jatoolsPrinter,墙外打印控件 楚琳Web打印控件)
  18. C语言生成BMP文件
  19. Latex合并单元格并文字居中
  20. GifCam使用方法(GIF动画软件)

热门文章

  1. css3 div跳动动画_CSS3实现闪烁动画效果
  2. 微信端iphone 使用video标签播放不了视频
  3. oracle集群搭建视频,Oracle RAC安装视频(高俊峰视频)
  4. 群晖Docker加速的简单方法
  5. FPGA(二) 边沿抓取
  6. mysql数据库回滚日志_超干货!为了让你彻底弄懂 MySQL 事务日志,我通宵搞出了这份图解...
  7. 中兴霸道女总裁何雪梅投案自首 案发前净身出户
  8. 邮件服务器 之 利用debian sarge和postfix 2.1构建媲美ISP的邮件系统
  9. 尚硅谷Redis6视频课程
  10. 电气设计软件中最常见的10个错误