Socket/TCP通信

Socket原理

    socket通常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。

   应用程序通常通过"套接字"向网络发送请求或者应答网络请求。Socket和ServerSocket类位于java.net包中。ServerSocket用于服务端,Socket是建立网络连接时是用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,实现所需的会话。

 获取本地地址和端口号

    java.net.Socket为套接字类,其提供了很多方法,其中我们通过Socket获取本地的地址以及端口号。
    int getLocalPort():该方法用于获取本地使用的端口号.
    InetAddress getLocalAddress():该方法用于获取套接字绑定的本地地址。
    使用InetAddress获取本地的地址方法:
    String getCanonicalHostName() 获取此IP地址的完全限定域名。
    String getHostAddress();返回IP地址字符串(以文本表现形式)
获取本地地址和端口号
     Socket socket=new Socket("localhost",8080);
     InetAddress add=socket.getLocalAddress();
     System.out.println(add.getCanonicalHostName());
     System.out.println(add.getHostAddress());
     System.out.println(socket.getLocalPort());
获取远端地址和端口号
    通过Socket获取远端的地址以及端口号
    int getPort():    该方法用于获取远端使用的端口号
    InetAddress.getInetAddress():  该方法用于获取套接字绑定的远端地址
 获取远端地址和端口号
    Socket socket=new Socket("localhost",8080);
    InetAddress inetAdd=socket.getInetAddress();
    System.out.println(inetAdd.getCanonicalHostName());
    System.out.println(inetAdd.getHostAddress());
    System.out.println(socket.getPort());
获取网络输入流和网络输出流
    通过Socket获取输入流与输出流,这两个方法是使用Socket通讯的关键方法。
    InputStream getInputStream() :该方法用于返回此套接字的输入流。
    OutputStream getOutputStream(): 该方法用于返回此套接字的输出流。
获取网络输入流和网络输出流
    Socket socket=new Socket("localhost",8088);
    InputStream in=socket.getInputStream();
    OutputStream out=socket.getOutputStream();
close方法
    当使用Socket进行通讯完毕后,要关闭Socket以释放系统资源
    -void close():关闭此套接字。当关闭了该套接字后,也会同时关闭由此获取的输入流与输出流。
Socket通信模型
    Server端ServerSocket监听
    java.net.ServerSocket是运行于服务端应用程序中。通常创建ServerSocket需要指定服务端口号,之后监听Socket的连接。
    //创建ServerSocket并申请服务端口8088
    ServerSocket server=new ServerSocket(8080);
   //方法会产生阻塞,直到某个Socket连接,并返回请求连接的Socket

  Socket socket=Server.accept();

Client端Socket连接

    当服务端创建ServerSocket并通过accept()方法侦听后,我们就可以通过在客户端应用程序中创建Socket来向服务端发起连接。需要注意的是,创建Socket的同时就发起连接,若连接异常会抛出异常。
    Socket socket=new Socket("localhost",8088);
C-S端通信模型
    服务器端                              客户端

  创建监听服务
   等待连接   <---建立连接---------连接服务器 
   进行通讯   <---进行通讯-------->进行通讯
   关闭连接                                   关闭连接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值