基于TCP/IP协议的Socket通信(1)
基于TCP/IP协议的Socket通信(1)
1、 套签字
当两台主机的程序要通过网络进行通信的时候,两台主机都要知道对方的地址。比如你与小王进行通话时,必须要知道对方的手机号,这样你才会打给小王,小王也会知道来电话的是你。电话号码类似于主机的地址,网络中用IP地址来表示主机的地址。
一个套接字都有自己的IP地址和端口号,两两套接字直接通过IP地址和端口号对应,这就保证了信息在两台主机的程序之间的准确传输。
在这种模式下主机A的程序将一段信息写进Socket1中,Socket1将信息发送给Socket2,Socket2将信息写入主机B的程序b中。
在利用套接字进行通信的时候,都是服务器和客户机之间进行通信。基于TCP/IP协议的Socket编程,两个套接字建立的链接都是可靠地,可靠的意思是说当数据在网络传输过程中出错时,数据会由发送方重新发送。
利用套接字编程主要步骤如下
1、分别为服务器,客户机创建套接字,将两个套接字连接起来。
2、打开套接字的输入输出流。输入流用来接收对方套接字的数据,输出流用来向对方套接字输出数据。
3、利用输入输出流进行数据传输。
4、数据传输完毕后,关闭套接字连接。
看到这里可能有人会问,那么我想让客户机和客户及之间进行通信呢?我们可以利用服务器作为通信的中转站,比如客户机A要向客户机B发送数据,客户机A先将数据发送给服务器,服务器再将数据发送给客户机B。
2. 客户机端程序步骤为:
1、ServerSocket类
服务器端使用ServerSocket类创建套接字。
网络通信中,ServerSocket类先创建一个套接字对象,等待客户机套接字的连接,一旦客户机套接字申请连接,服务器套接字对象则会通过accept()方法返回一个对应客户机套接字的服务器套接字。这个时候服务器和客户机之间才得到了真的连接,
1.1 ServerSocket类的构造方法
public ServerSocket(int port) throws IOException
功能:创建一个以port为端口号的服务器端socket套接字,当socket套接字连接数为50时,则拒绝其他客户机端套接字的连接
参数 port:端口号
public ServerSocket(int port,int backlog) throws IOException
功能:创建一个以port为端口号的服务器端socket套接字,当socket套接字连接数为 backlog时,则拒绝其他客户机端套接字的连接
参数 port:端口号
backlog:能连接的最大套接字数目。
1.2 ServerSocket类的普通方法
public Socket accept()throws IOException
功能:服务器端指定端口号侦听客户端发出的连接请求,若接收到请求则与之连接,否则该方法一直阻塞知道连接成功。该方法返回一个新的Socket对象,服务器端通过它与连接的客户进行通信
public IntAdress getInetAddress()
功能:获取服务器端Socket的IP地址
public int getLocalPort()
功能:获取服务器端Socket侦听的端口号
public String toString()
功能:返回该套接字的字符串表示
public void close()throws IOException
功能:关闭Socket连接
2、Socket类
客户机端用socket类来创建套接字对象 2.1 Socket类的构造方法
public Socket(String host,int port)throws UnknowHostException,IOExceptio
功能:创建一个指定服务器host和服务器端口号port套接字对象,并向服务器发送连接请求 参数:host:服务器主机名
port :服务器端口号
public Socket(InetAddress address,int port)throws IOException
功能:创建一个指定服务器ip地址和服务器端口号port套接字对象,并向服务器发送连接请求 参数:address:服务器ip地址
port :服务器端口号
2.2 与Socket数据读写有关的常用方法
public InputStream getInputStram()throws IOException
功能:为当前socket对象创建输入流
public OutPutStream getOutPutStream()throws IOException
功能:为当前socket对象创建输出流
以上两个方法非常重要,getInputStream()用来创建输入流对象,getOutputStream()用来创建输出流对象。有了输入输出流,程序就可以非常方便的进行读写。
2.3关闭socket连接的方法
public synchronized void close() throws IOEception
功能:关闭建立的socket连接。