网络上的两个程序通过一个双向的通讯连接实现数据的交换,双向链路的一端称为一个Socket。Socket通常用来实现客户端和服务端的连接。Socket是TCP/IP中的一个十分流行的数据传输方式,一个Socket由一个IP地址和一个端口号唯一确定。但是,Socket所支持的协议种类也不止TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP的网络编程。
1.Socket通信的过程
Server(服务)端Listen(监听)某个端口是否有连接请求,Client(客户)端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。
在Java网络编程应用中,对于一个功能齐全的Socket来说,其工作过程包含如下的基本步骤。
1)创建Socket。
2)打开连接到Socket的输入/输出流。
3)按照一定的协议对Socket进行读/写操作。
4)关闭Socket。
2.创建Socket
在Java网络编程应用中,在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,其中包含了如下的构造方法。
□Socket(InetAddress address,int port)。
□Socket(InetAddress address,int port,boolean stream)。(www.xing528.com)
□Socket(String host,int prot)。
□Socket(String host,int prot,boolean stream)。
□Socket(SocketImpl impl)。
□Socket(String host,int port,InetAddress localAddr,int localPort)。
□Socket(InetAddress address,int port,InetAddress localAddr,int localPort)。
□ServerSocket(int port)。
□ServerSocket(int port,int backlog)。
□ServerSocket(int port,int backlog,InetAddress bindAddr)。
在上述构造方法中,参数address、host和port分别是双向连接中另一方的IP地址、主机名和端口号,参数stream指明socket是流Socket还是数据报Socket,参数localPort表示本地主机的端口号,参数localAddr和bindAddr是本地机器的地址(ServerSocket的主机地址),参数impl是Socket的父类,既可以用来创建ServerSocket又可以用来创建Socket。参数count则表示服务端所能支持的最大连接数。例如:
注意:必须小心地选择端口号,每一个端口号提供一种特定的服务,只有给出正确的端口号,才能获得相应的服务。0~1023的端口号为系统所保留,例如HTTP服务的端口号为80,Telnet服务的端口号为21,FTP服务的端口号为23,所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。另外,在创建Socket时如果发生错误,将产生IOException,在程序中必须相应地作出处理,在创建Socket或ServerSocket必须捕获或抛出异常。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。