您的位置:首页 > 理论基础 > 计算机网络

java-------TCP------Socket与ServerSocket

2014-03-29 11:03 337 查看
            运行TCP协议通信时,客户机和服务器之间首先需要建立一个连接,然后,客户机端和服务器端程序各自将一个Socket对象与这个连接绑定,然后,两端的程序就可以通过和连接绑定的Socket对象来读写数据了。

一、网络套接字Socket与ServerSocket

       在java网络编程中,套接字是一个用于端口连接和数据交换的对象,一个套接字有IP地址和端口号唯一确定。网络的每一个端口,都可以通过和连接绑定的套接字对象来交换数据。在c/s的模式下,按照套接字在网络中所起的作用不同,可以将它们分两类:客户机端套接字Socket和服务器端套接字SreverSocket.

(1)服务器端ServerSocket

       服务器端的套接字始终在监听是否有程序请求,如果发现客户极端Socket向服务器发出连接请求,且服务器接受服务请求,则服务器端Socket向客户极端Socket发回"接受"的消息。这样,两个Socket对象之间的连接就建立了。

(2)客户极端Socket

       建立一个和服务器的连接,这需要客户极端知道服务器端的主机名和提供服务的端口号。有了这些信息,当客户极端发出的建立连接的请求被服务器端接受时,客户机上就会创建一个Socket对象。利用这个Socket对象,客户机就可以与服务器进行通信了。

二、Socket类

       Socket实现了客户极端的Socket,Socket对象可以用来向服务器发出连接请求,交换数据

        常用的构造方法      Socket(InetAddress address,int port)  创建一个主机地址为address,端口号为port的流套接字。

         如:Socket mysocket = new Socket("218.198.118.112",2010);要连接的远程主机的IP地址是218.198.118.112,端口号是2010

        重要的方法

        InputStream getInputStream()    返回此套接字的输入流

        OutputStream getOutputStream()   返回此套接字的输出流

三、代码实现

package org.Net;
import java.net.Socket;

public class NetDemo04
{
public static void main(String[] args)
{
Socket socket;
try
{
socket = new Socket("119.75.213.36",80);
System.out.println("是否绑定连接:"+socket.isBound());
System.out.println("本地端口:"+socket.getLocalPort());
System.out.println("连接服务器的端口:"+socket.getPort());
System.out.println("连接服务器的地址:"+socket.getInetAddress());
System.out.println("远程服务器的套接字:"+socket.getRemoteSocketAddress());
System.out.println("是否处于连接状态:"+socket.isConnected());
System.out.println("客户套接详情:"+socket.toString());
}
catch (Exception e)
{
System.out.println("服务器端没有启动");
}
}
}

四、ServerSocket类

        ServerSocket类实现了服务器端套接字。SreverSocket对象监听网络中来自客户机的服务请求,根据请求建立连接,并根据服务请求运行相应的服务程序。

           常用的方法

            Socket accept();      侦听并接受到此套接字的连接

五、代码实现

package org.Net;
import java.net.ServerSocket;

public class NetDemo05
{
public static void main(String[] args)
{
ServerSocket serversocket = null;
try
{
serversocket = new ServerSocket(2010);
System.out.println("服务器的端口:"+serversocket.getLocalPort());
System.out.println("服务器的地址:"+serversocket.getInetAddress());
System.out.println("服务器的套接字:"+serversocket.getLocalSocketAddress());
System.out.println("是否绑定连接:"+serversocket.isBound());
System.out.println("连接是否关闭:"+serversocket.isClosed());
System.out.println("服务器套接字详情:"+serversocket.toString());
}
catch (Exception e)
{
System.out.println("服务器端没有启动");
}
}
}

六、效果展示



七、本地端口说明

        简单地说,本地端口就是本地可以对外提供服务或与外界连接的接口

八、查询本地端口

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java Socket ServerSocket